You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
102 lines
2.9 KiB
102 lines
2.9 KiB
#if NETFX || NETCORE
|
|
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.Drawing;
|
|
using System.Text;
|
|
using System.Windows.Forms;
|
|
|
|
namespace Apewer.Surface
|
|
{
|
|
|
|
/// <summary></summary>
|
|
internal class BlockList : ListBox
|
|
{
|
|
private List<Color> _color = new List<Color>();
|
|
|
|
/// <summary></summary>
|
|
public BlockList()
|
|
{
|
|
Font = FormsUtility.DefaultFont;
|
|
BorderStyle = BorderStyle.None;
|
|
DrawMode = DrawMode.OwnerDrawVariable;
|
|
SelectionMode = SelectionMode.One;
|
|
|
|
MeasureItem += Event_MeasureItem;
|
|
DrawItem += Event_DrawItem;
|
|
}
|
|
|
|
/// <summary></summary>
|
|
private void Event_DrawItem(object sender, DrawItemEventArgs e)
|
|
{
|
|
if (_color.Count > 0)
|
|
{
|
|
RectangleF vrf = new RectangleF(8, e.Bounds.Top + 4, e.Bounds.Width - 16, 16);
|
|
Brush vb = new SolidBrush(GetColor(e.Index));
|
|
string vs = Items[e.Index].ToString();
|
|
e.DrawBackground();
|
|
e.DrawFocusRectangle();
|
|
e.Graphics.DrawString(vs, e.Font, vb, vrf);
|
|
}
|
|
}
|
|
|
|
/// <summary></summary>
|
|
private void Event_MeasureItem(object sender, MeasureItemEventArgs e)
|
|
{
|
|
e.ItemHeight = 25;
|
|
}
|
|
|
|
/// <summary></summary>
|
|
private Color GetColor(int index)
|
|
{
|
|
if (index >= _color.Count) return ForeColor;
|
|
return _color[index];
|
|
}
|
|
|
|
/// <summary></summary>
|
|
public void Append(string text) => Write(text, ForeColor);
|
|
|
|
/// <summary></summary>
|
|
public void Write(string text) => Write(text, ForeColor);
|
|
|
|
/// <summary></summary>
|
|
public void Black(string text) => Write(text, FormsUtility.Black);
|
|
|
|
/// <summary></summary>
|
|
public void Green(string text) => Write(text, FormsUtility.Green);
|
|
|
|
/// <summary></summary>
|
|
public void Red(string text) => Write(text, FormsUtility.Red);
|
|
|
|
/// <summary></summary>
|
|
public void Gray(string text) => Write(text, FormsUtility.GraceLocked);
|
|
|
|
/// <summary></summary>
|
|
public void Error(string text) => Red(text);
|
|
|
|
/// <summary></summary>
|
|
public void Write(string text, Color color)
|
|
{
|
|
var t = string.IsNullOrEmpty(text) ? "" : text.Trim();
|
|
while (_color.Count < Items.Count)
|
|
{
|
|
_color.Add(ForeColor);
|
|
}
|
|
while (_color.Count > Items.Count)
|
|
{
|
|
_color.RemoveAt(_color.Count - 1);
|
|
}
|
|
_color.Add((color == null) ? FormsUtility.Black : color);
|
|
Items.Add(t);
|
|
}
|
|
|
|
/// <summary></summary>
|
|
public void SelectLast()
|
|
{
|
|
if (Items.Count > 0) SelectedIndex = Items.Count - 1;
|
|
}
|
|
|
|
}
|
|
}
|
|
|
|
#endif
|
|
|