144 lines
		
	
	
		
			3.1 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
			
		
		
	
	
			144 lines
		
	
	
		
			3.1 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
| using System.ComponentModel;
 | |
| using System.Drawing;
 | |
| using System.Windows.Forms;
 | |
| 
 | |
| namespace DevComponents.SuperGrid.Design
 | |
| {
 | |
|     [ToolboxItem(false)]
 | |
|     public class ImageListBox : ListBox
 | |
|     {
 | |
|         #region Private variables
 | |
| 
 | |
|         private ImageList _ImageList;
 | |
| 
 | |
|         #endregion
 | |
| 
 | |
|         public ImageListBox()
 | |
|         {
 | |
|             MinimumSize = new Size(20, 20);
 | |
|             IntegralHeight = true;
 | |
| 
 | |
|             DrawMode = DrawMode.OwnerDrawVariable;
 | |
|         }
 | |
| 
 | |
|         #region Public properties
 | |
| 
 | |
|         public ImageList ImageList
 | |
|         {
 | |
|             get { return (_ImageList); }
 | |
|             set { _ImageList = value; }
 | |
|         }
 | |
| 
 | |
|         #endregion
 | |
| 
 | |
|         #region OnMeasureItem
 | |
| 
 | |
|         protected override void OnMeasureItem(MeasureItemEventArgs e)
 | |
|         {
 | |
|             base.OnMeasureItem(e);
 | |
| 
 | |
|             e.ItemWidth += 22;
 | |
| 
 | |
|             if (e.ItemHeight < 20)
 | |
|                 e.ItemHeight = 20;
 | |
|         }
 | |
| 
 | |
|         #endregion
 | |
| 
 | |
|         #region OnDrawItem
 | |
| 
 | |
|         protected override void OnDrawItem(DrawItemEventArgs e)
 | |
|         {
 | |
|             Graphics g = e.Graphics;
 | |
| 
 | |
|             e.DrawBackground();
 | |
| 
 | |
|             if (e.Index < Items.Count)
 | |
|             {
 | |
|                 Rectangle r = e.Bounds;
 | |
|                 r.Width = 18;
 | |
| 
 | |
|                 if (r.Height > 18)
 | |
|                 {
 | |
|                     r.Y += (r.Height - 18)/2;
 | |
|                     r.Height = 18;
 | |
|                 }
 | |
| 
 | |
|                 ImageListBoxItem item = (ImageListBoxItem) Items[e.Index];
 | |
| 
 | |
|                 Image image = (uint) item.ImageIndex < _ImageList.Images.Count
 | |
|                                   ? _ImageList.Images[item.ImageIndex]
 | |
|                                   : null;
 | |
| 
 | |
|                 if (image != null)
 | |
|                     g.DrawImage(image, r);
 | |
| 
 | |
|                 g.DrawRectangle(Pens.Black, r);
 | |
| 
 | |
|                 using (Brush br = new SolidBrush(e.ForeColor))
 | |
|                 {
 | |
|                     using (StringFormat sf = new StringFormat())
 | |
|                     {
 | |
|                         sf.Alignment = StringAlignment.Near;
 | |
|                         sf.LineAlignment = StringAlignment.Center;
 | |
| 
 | |
|                         r = e.Bounds;
 | |
|                         r.X += 30;
 | |
|                         r.Width -= 30;
 | |
| 
 | |
|                         g.DrawString(item.Text, e.Font, br, r, sf);
 | |
|                     }
 | |
|                 }
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         #endregion
 | |
|     }
 | |
| 
 | |
|     public class ImageListBoxItem
 | |
|     {
 | |
|         #region Private variables
 | |
| 
 | |
|         private string _Text;
 | |
|         private int _ImageIndex;
 | |
| 
 | |
|         #endregion
 | |
| 
 | |
|         #region Constructors
 | |
| 
 | |
|         public ImageListBoxItem(string text, int index)
 | |
|         {
 | |
|             Text = text;
 | |
|             ImageIndex = index;
 | |
|         }
 | |
| 
 | |
|         public ImageListBoxItem(string text)
 | |
|             : this(text, -1)
 | |
|         {
 | |
|         }
 | |
| 
 | |
|         public ImageListBoxItem()
 | |
|             : this("", -1)
 | |
|         {
 | |
|         }
 | |
| 
 | |
|         #endregion
 | |
| 
 | |
|         #region Public properties
 | |
| 
 | |
|         public int ImageIndex
 | |
|         {
 | |
|             get { return (_ImageIndex); }
 | |
|             set { _ImageIndex = value; }
 | |
|         }
 | |
| 
 | |
|         public string Text
 | |
|         {
 | |
|             get { return (_Text); }
 | |
|             set { _Text = value; }
 | |
|         }
 | |
| 
 | |
|         #endregion
 | |
|     }
 | |
| }
 |