==============================================================
写代码过程中犯的错误:
List<Item> 没有new
checkbox1在InitializeComponent()前调用。
sampleRun中的方法在sampleRun实例化之前调用了。
==============================================================
Form1的c sharp:
public partial class Form1 : Form { private Workspace m_workspace; private MapControl m_mapControl; private SampleRun m_sampleRun; public Form1() { InitializeComponent(); this.Load += new EventHandler(Form1_Load); this.FormClosing += new FormClosingEventHandler(Form1_FormClosing); this.checkBox1.CheckedChanged += new EventHandler(checkBox1_CheckedChanged); this.panel2.Paint += panel2_Paint; m_workspace = new Workspace(this.components); m_mapControl = new MapControl(); m_mapControl.Dock = DockStyle.Fill; } void panel2_Paint(object sender, PaintEventArgs e) { if (checkBox1.Checked && m_sampleRun.listItems.Count > 0) { panel3.BackColor = m_sampleRun.listItems[0].itemColor; label1.Text = m_sampleRun.listItems[0].itemName; panel4.BackColor = m_sampleRun.listItems[1].itemColor; label1.Text = m_sampleRun.listItems[1].itemName; Panel[] arrPanel = new Panel[]{panel3,panel4,panel5,panel6,panel7,panel8,panel9,panel10,panel11,panel12,panel13}; Label[] arrLabel = new Label[] { label1, label2, label3, label4, label5, label6, label7, label8, label9, label10, label11 }; for (int i = 0; i < 11; i++) { arrPanel[i].BackColor = m_sampleRun.listItems[i].itemColor; arrLabel[i].Text = m_sampleRun.listItems[i].itemName; } } } private void checkBox1_CheckedChanged(object sender, EventArgs e) { m_sampleRun.ShowThemeLayer(checkBox1.Checked); this.panel2.Visible = checkBox1.Checked; } private void Form1_FormClosing(object sender, FormClosingEventArgs e) { m_mapControl.Dispose(); m_workspace.Dispose(); } private void Form1_Load(object sender, EventArgs e) { m_sampleRun = new SampleRun(m_workspace, m_mapControl); checkBox1.Checked = true; base.Controls.Add(m_mapControl); } }
===========================
SampleRun类:
namespace uniqueDisplayTheme { internal class SampleRun { private Workspace m_workspace; private MapControl m_mapControl; private string layerName; public List<Item> listItems; private ThemeUnique themeUnique; public SampleRun(Workspace workspace, MapControl mapControl) { this.m_workspace = workspace; this.m_mapControl = mapControl; this.m_mapControl.Map.Workspace = m_workspace; this.listItems = new List<Item>(); Initialize(); } private void Initialize() { WorkspaceConnectionInfo conInfo = new WorkspaceConnectionInfo(@"D:\souce\supermap\SampleData\ThematicMaps\Thematicmaps.smwu"); m_workspace.Open(conInfo); m_mapControl.Map.Open(m_workspace.Maps[0]); Dataset dataset = m_workspace.Datasources[0].Datasets["Landuse_R"]; //地图上加图层 m_mapControl.Map.Layers.Add(dataset, true); m_mapControl.Action = Action.Pan; for (int i = 0; i < m_mapControl.Map.Layers.Count; i++) { Layer layer = m_mapControl.Map.Layers[i]; layer.IsSelectable = true; } m_mapControl.Map.ViewEntire(); } public void ShowThemeLayer(bool isShow) { m_mapControl.Map.Layers.Remove(layerName); if (isShow) { DatasetVector datasetVector = m_workspace.Datasources[0].Datasets["Landuse_R"] as DatasetVector; //创建专题图 themeUnique = new ThemeUnique(); themeUnique.UniqueExpression = "LandType"; //把单值专题图子项添加到单值专题图类中 CreateThemeItem(Color.FromArgb(206, 101, 156), "城市"); CreateThemeItem(Color.FromArgb(181, 178, 181), "旱地"); CreateThemeItem(Color.FromArgb(255, 255, 155), "水浇地"); CreateThemeItem(Color.FromArgb(254, 175, 136), "水田"); CreateThemeItem(Color.FromArgb(115, 77, 0), "沙漠"); CreateThemeItem(Color.FromArgb(173, 170, 0), "沼泽"); CreateThemeItem(Color.FromArgb(151, 219, 242), "湖泊水库"); CreateThemeItem(Color.FromArgb(90, 138, 66), "灌丛"); CreateThemeItem(Color.FromArgb(0, 113, 74), "用材林"); CreateThemeItem(Color.FromArgb(0, 170, 132), "经济林"); CreateThemeItem(Color.FromArgb(90, 179, 40), "草地"); Layer layer = m_mapControl.Map.Layers.Add(datasetVector, themeUnique, true); layerName = layer.Name; //StringBuilder strbuild = new StringBuilder(); //foreach (Layer layer1 in m_mapControl.Map.Layers) //{ // strbuild.Append(layer1.Name + ","); //} //System.Windows.Forms.MessageBox.Show(strbuild.ToString()); } m_mapControl.Map.Refresh(); } /// <summary> /// 创建单值专题图子项,并添加到单值专题图类中 /// </summary> /// <param name="itemcolor"></param> /// <param name="itemname"></param> public void CreateThemeItem(Color itemcolor, string itemname) { GeoStyle geostyle = new GeoStyle(); geostyle.FillForeColor = itemcolor; geostyle.FillOpaqueRate = 80; geostyle.LineSymbolID = 5; ThemeUniqueItem themeItem = new ThemeUniqueItem(); themeItem.Caption = itemname; themeItem.Style = geostyle; themeItem.IsVisible = true; themeItem.Unique = itemname; Item item = new Item(itemname, itemcolor);//创建 名字+颜色的对象 listItems.Add(item); themeUnique.Add(themeItem); } } /// <summary> /// 构造一个类,用于存放单值专题图索引记录名 和 颜色 /// </summary> class Item { private string name; private Color color; public string itemName { get { return name; } } public Color itemColor { get { return color; } } public Item(string name, Color color) { this.name = name; this.color = color; } } }