DutyContent/ThirdParty/EXComboBox.cs
ksh cbfa535d20
Enhanced after version 14 (#30)
* Add log tab
* Merge control mesg & duty log
* Fix ping (calc loss)
* Add current connection in ping tab. Able to copy by double clicking item
* Log font has moved to config
* Add debug enable on config + save
* Display ping failed reason (debug enable)
* Handled copy exception
* New content list in duty tab
* Show loss rate option in ping tab
* Rename Chinese packet info file (No data)
* Bigger UI font
2021-08-14 23:35:53 +09:00

199 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; }
}
}
}
}