200 lines
3.7 KiB
C#
200 lines
3.7 KiB
C#
|
// https://www.codeproject.com/Articles/13006/Extended-ListView
|
|||
|
using System.Windows.Forms;
|
|||
|
using System.Drawing;
|
|||
|
using System.Collections;
|
|||
|
|
|||
|
namespace DutyContent.ThirdParty
|
|||
|
{
|
|||
|
class EXComboBox : ComboBox
|
|||
|
{
|
|||
|
private Brush _highlightbrush; //color of highlighted items
|
|||
|
|
|||
|
public EXComboBox()
|
|||
|
{
|
|||
|
_highlightbrush = SystemBrushes.Highlight;
|
|||
|
DrawMode = DrawMode.OwnerDrawFixed;
|
|||
|
DrawItem += new DrawItemEventHandler(SelfDrawItem);
|
|||
|
}
|
|||
|
|
|||
|
public Brush MyHighlightBrush
|
|||
|
{
|
|||
|
get { return _highlightbrush; }
|
|||
|
set { _highlightbrush = value; }
|
|||
|
}
|
|||
|
|
|||
|
private void SelfDrawItem(object sender, DrawItemEventArgs e)
|
|||
|
{
|
|||
|
if (e.Index == -1)
|
|||
|
return;
|
|||
|
|
|||
|
e.DrawBackground();
|
|||
|
|
|||
|
if ((e.State & DrawItemState.Selected) != 0)
|
|||
|
{
|
|||
|
e.Graphics.FillRectangle(_highlightbrush, e.Bounds);
|
|||
|
}
|
|||
|
|
|||
|
EXItem item = (EXItem)this.Items[e.Index];
|
|||
|
Rectangle bounds = e.Bounds;
|
|||
|
int x = bounds.X + 2;
|
|||
|
|
|||
|
if (item.GetType() == typeof(EXImageItem))
|
|||
|
{
|
|||
|
EXImageItem imgitem = (EXImageItem)item;
|
|||
|
if (imgitem.MyImage != null)
|
|||
|
{
|
|||
|
Image img = imgitem.MyImage;
|
|||
|
int y = bounds.Y + ((int)(bounds.Height / 2)) - ((int)(img.Height / 2)) + 1;
|
|||
|
e.Graphics.DrawImage(img, x, y, img.Width, img.Height);
|
|||
|
x += img.Width + 2;
|
|||
|
}
|
|||
|
}
|
|||
|
else if (item.GetType() == typeof(EXMultipleImagesItem))
|
|||
|
{
|
|||
|
EXMultipleImagesItem imgitem = (EXMultipleImagesItem)item;
|
|||
|
if (imgitem.MyImages != null)
|
|||
|
{
|
|||
|
for (int i = 0; i < imgitem.MyImages.Count; i++)
|
|||
|
{
|
|||
|
Image img = (Image)imgitem.MyImages[i];
|
|||
|
int y = bounds.Y + ((int)(bounds.Height / 2)) - ((int)(img.Height / 2)) + 1;
|
|||
|
e.Graphics.DrawImage(img, x, y, img.Width, img.Height);
|
|||
|
x += img.Width + 2;
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
int fonty = bounds.Y + ((int)(bounds.Height / 2)) - ((int)(e.Font.Height / 2));
|
|||
|
e.Graphics.DrawString(item.Text, e.Font, new SolidBrush(e.ForeColor), x, fonty);
|
|||
|
e.DrawFocusRectangle();
|
|||
|
}
|
|||
|
|
|||
|
public class EXItem
|
|||
|
{
|
|||
|
private string _text = "";
|
|||
|
private string _value = "";
|
|||
|
|
|||
|
public EXItem()
|
|||
|
{
|
|||
|
|
|||
|
}
|
|||
|
|
|||
|
public EXItem(string text)
|
|||
|
{
|
|||
|
_text = text;
|
|||
|
}
|
|||
|
|
|||
|
public string Text
|
|||
|
{
|
|||
|
get { return _text; }
|
|||
|
set { _text = value; }
|
|||
|
}
|
|||
|
|
|||
|
public string MyValue
|
|||
|
{
|
|||
|
get { return _value; }
|
|||
|
set { _value = value; }
|
|||
|
}
|
|||
|
|
|||
|
public override string ToString()
|
|||
|
{
|
|||
|
return _text;
|
|||
|
}
|
|||
|
|
|||
|
}
|
|||
|
|
|||
|
public class EXImageItem : EXItem
|
|||
|
{
|
|||
|
private Image _image;
|
|||
|
|
|||
|
public EXImageItem()
|
|||
|
{
|
|||
|
|
|||
|
}
|
|||
|
|
|||
|
public EXImageItem(string text)
|
|||
|
{
|
|||
|
this.Text = text;
|
|||
|
}
|
|||
|
|
|||
|
public EXImageItem(Image image)
|
|||
|
{
|
|||
|
_image = image;
|
|||
|
}
|
|||
|
|
|||
|
public EXImageItem(string text, Image image)
|
|||
|
{
|
|||
|
this.Text = text;
|
|||
|
_image = image;
|
|||
|
}
|
|||
|
|
|||
|
public EXImageItem(Image image, string value)
|
|||
|
{
|
|||
|
_image = image;
|
|||
|
this.MyValue = value;
|
|||
|
}
|
|||
|
|
|||
|
public EXImageItem(string text, Image image, string value)
|
|||
|
{
|
|||
|
this.Text = text;
|
|||
|
_image = image;
|
|||
|
this.MyValue = value;
|
|||
|
}
|
|||
|
|
|||
|
public Image MyImage
|
|||
|
{
|
|||
|
get { return _image; }
|
|||
|
set { _image = value; }
|
|||
|
}
|
|||
|
|
|||
|
}
|
|||
|
|
|||
|
public class EXMultipleImagesItem : EXItem
|
|||
|
{
|
|||
|
private ArrayList _images;
|
|||
|
|
|||
|
public EXMultipleImagesItem()
|
|||
|
{
|
|||
|
|
|||
|
}
|
|||
|
|
|||
|
public EXMultipleImagesItem(string text)
|
|||
|
{
|
|||
|
this.Text = text;
|
|||
|
}
|
|||
|
|
|||
|
public EXMultipleImagesItem(ArrayList images)
|
|||
|
{
|
|||
|
_images = images;
|
|||
|
}
|
|||
|
|
|||
|
public EXMultipleImagesItem(string text, ArrayList images)
|
|||
|
{
|
|||
|
this.Text = text;
|
|||
|
_images = images;
|
|||
|
}
|
|||
|
|
|||
|
public EXMultipleImagesItem(ArrayList images, string value)
|
|||
|
{
|
|||
|
_images = images;
|
|||
|
this.MyValue = value;
|
|||
|
}
|
|||
|
|
|||
|
public EXMultipleImagesItem(string text, ArrayList images, string value)
|
|||
|
{
|
|||
|
this.Text = text;
|
|||
|
_images = images;
|
|||
|
this.MyValue = value;
|
|||
|
}
|
|||
|
|
|||
|
public ArrayList MyImages
|
|||
|
{
|
|||
|
get { return _images; }
|
|||
|
set { _images = value; }
|
|||
|
}
|
|||
|
|
|||
|
}
|
|||
|
|
|||
|
}
|
|||
|
}
|