1、首先来看一下效果图,我们接下来要实现就是右边那个符号选择控件(SymbolComboBox);

2、要实现这样一个符号选择器,我们需要将VS中的ComboBox进行重写,使它能实现图像显示,如下代码:
View Code
1 public SymbolComboBox()
2 {
3 this.DrawMode = DrawMode.OwnerDrawFixed;
4 this.DropDownStyle = ComboBoxStyle.DropDownList;
5 }
6
7 protected override void OnDrawItem(DrawItemEventArgs e)
8 {
9 e.DrawBackground();
10 e.DrawFocusRectangle();
11
12 try
13 {
14 //显示图片
15 Image image = (Image)Items[e.Index];
16 Rectangle rect = e.Bounds;
17 rect.Height -= 2;
18 rect.Width -= 2;
19 rect.X += 1;
20 rect.Y += 1;
21 e.Graphics.DrawImage(image, rect);
22 }
23 catch
24 {
25 if (e.Index != -1)
26 {
27 //不是图片则显示字符
28 e.Graphics.DrawString(Items[e.Index].ToString(), e.Font, new SolidBrush(e.ForeColor), e.Bounds.X, e.Bounds.Y);
29 }
30 }
31 finally
32 {
33 base.OnDrawItem(e);
34 }
35 }
2 {
3 this.DrawMode = DrawMode.OwnerDrawFixed;
4 this.DropDownStyle = ComboBoxStyle.DropDownList;
5 }
6
7 protected override void OnDrawItem(DrawItemEventArgs e)
8 {
9 e.DrawBackground();
10 e.DrawFocusRectangle();
11
12 try
13 {
14 //显示图片
15 Image image = (Image)Items[e.Index];
16 Rectangle rect = e.Bounds;
17 rect.Height -= 2;
18 rect.Width -= 2;
19 rect.X += 1;
20 rect.Y += 1;
21 e.Graphics.DrawImage(image, rect);
22 }
23 catch
24 {
25 if (e.Index != -1)
26 {
27 //不是图片则显示字符
28 e.Graphics.DrawString(Items[e.Index].ToString(), e.Font, new SolidBrush(e.ForeColor), e.Bounds.X, e.Bounds.Y);
29 }
30 }
31 finally
32 {
33 base.OnDrawItem(e);
34 }
35 }
3、再接下来就是要在SymbolComboBox中实现符号选择属性,如下代码:
View Code
1 private ISymbologyStyleClass m_SymbologyStyleClass = null;
2 private List<IStyleGalleryItem> m_SymbolArray = new List<IStyleGalleryItem>();
3
4 public ISymbologyStyleClass SymbologyStyleClass
5 {
6 get
7 {
8 return m_SymbologyStyleClass;
9 }
10 set
11 {
12 m_SymbologyStyleClass = value;
13
14 if (m_SymbologyStyleClass != null)
15 {
16 this.m_SymbolArray.Clear();
17 this.BeginUpdate();
18 this.Items.Clear();
19 for (int i = 0; i < m_SymbologyStyleClass.ItemCount; i++)
20 {
21 IStyleGalleryItem item = m_SymbologyStyleClass.GetItem(i);
22 stdole.IPictureDisp picture = m_SymbologyStyleClass.PreviewItem(item, this.Width, this.Height);
23 Image image = Image.FromHbitmap(new IntPtr(picture.Handle));
24 image = new Bitmap(image, new Size(image.Width - 10, image.Height));
25 this.Items.Add(image);
26 this.m_SymbolArray.Add(item);
27 }
28 this.EndUpdate();
29 }
30 }
31 }
32
33 public IStyleGalleryItem SelectSymbol
34 {
35 get
36 {
37 if (this.SelectedIndex >= 0 && m_SymbolArray.Count > this.SelectedIndex)
38 return m_SymbolArray[this.SelectedIndex];
39 else
40 return null;
41 }
42 }
2 private List<IStyleGalleryItem> m_SymbolArray = new List<IStyleGalleryItem>();
3
4 public ISymbologyStyleClass SymbologyStyleClass
5 {
6 get
7 {
8 return m_SymbologyStyleClass;
9 }
10 set
11 {
12 m_SymbologyStyleClass = value;
13
14 if (m_SymbologyStyleClass != null)
15 {
16 this.m_SymbolArray.Clear();
17 this.BeginUpdate();
18 this.Items.Clear();
19 for (int i = 0; i < m_SymbologyStyleClass.ItemCount; i++)
20 {
21 IStyleGalleryItem item = m_SymbologyStyleClass.GetItem(i);
22 stdole.IPictureDisp picture = m_SymbologyStyleClass.PreviewItem(item, this.Width, this.Height);
23 Image image = Image.FromHbitmap(new IntPtr(picture.Handle));
24 image = new Bitmap(image, new Size(image.Width - 10, image.Height));
25 this.Items.Add(image);
26 this.m_SymbolArray.Add(item);
27 }
28 this.EndUpdate();
29 }
30 }
31 }
32
33 public IStyleGalleryItem SelectSymbol
34 {
35 get
36 {
37 if (this.SelectedIndex >= 0 && m_SymbolArray.Count > this.SelectedIndex)
38 return m_SymbolArray[this.SelectedIndex];
39 else
40 return null;
41 }
42 }
4、现在,这样一个符号选择控件就已经完成了,剩下的就是使用了,很简单,如下:
1 ISymbologyStyleClass styleClass = axSymbologyControl1.GetStyleClass(axSymbologyControl1.StyleClass);
2 this.colorRampComboBox1.SymbologyStyleClass = styleClass;
2 this.colorRampComboBox1.SymbologyStyleClass = styleClass;

浙公网安备 33010602011771号