private void cmbCatalog_DrawItem(object sender, DrawItemEventArgs e) { if (e.Index < 0 || e.Index >= cmbCatalog.Items.Count) { return; } if (!(cmbCatalog.Items[e.Index] is GISDataComboItem)) { return; } //DrawItemState. GISDataComboItem item = (GISDataComboItem)cmbCatalog.Items[e.Index]; int level = item.Level; if ((e.State & DrawItemState.ComboBoxEdit) == DrawItemState.ComboBoxEdit) { level = 0; } using (SolidBrush brush = new SolidBrush(Color.Black)) { Rectangle rect = new Rectangle(e.Bounds.X + level * 11 + 18, e.Bounds.Y, e.Bounds.Width, e.Bounds.Height); if ((e.State & DrawItemState.Selected) == DrawItemState.Selected && (e.State & DrawItemState.ComboBoxEdit) != DrawItemState.ComboBoxEdit) { brush.Color = Color.DarkBlue; e.Graphics.FillRectangle(brush, rect); brush.Color = Color.White; } else { brush.Color = Color.White; e.Graphics.FillRectangle(brush, rect); brush.Color = Color.Black; } try { Image image = _imageList.Images[item.ImageIndex]; e.Graphics.DrawImage(image, e.Bounds.X + level * 11 + 3, e.Bounds.Y, 16, 16); } catch { } e.Graphics.DrawString(item.ToString(), cmbCatalog.Font, brush, e.Bounds.X + level * 11 + 40, e.Bounds.Y + 2); } }
public void AddChildNode(GISDataComboItem exObject) { int index = cmbCatalog.SelectedIndex; if (index == -1) { index = cmbCatalog.Items.Count - 1; } int level = ((GISDataComboItem)exObject).Level; cmbCatalog.Items.Insert(index + 1, new GISDataComboItem(exObject.Text, exObject.FullName, exObject.ImageIndex, level) { Tag = exObject.Tag }); cmbCatalog.SelectedIndex = index + 1; }