Невозможно, но невероятно сложно. Что вы предлагаете не будет работать, обратите внимание на мета-данных в классе CheckedListBox
для метода DrawItem
:
// Summary:
// Occurs when a visual aspect of an owner-drawn System.Windows.Forms.CheckedListBox
// changes. This event is not relevant to this class.
[Browsable(false)]
[EditorBrowsable(EditorBrowsableState.Never)]
public event DrawItemEventHandler DrawItem;
Таким образом, единственным вариантом является, чтобы получить свой собственный класс от CheckedListBox
, и в моем ограниченном тестировании, это будет долгий путь. Вы можете обрабатывать рисунок достаточно просто, как таковой:
public class CustomCheckedListBox : CheckedListBox
{
protected override void OnDrawItem(DrawItemEventArgs e)
{
String s = Items[e.Index].ToString();
s += "APPEND"; //do what you like to the text
CheckBoxState state = GetCheckBoxState(e.State); // <---problem
Size glyphSize = CheckBoxRenderer.GetGlyphSize(e.Graphics, state);
CheckBoxRenderer.DrawCheckBox(
e.Graphics,
e.Bounds.Location,
new Rectangle(
new Point(e.Bounds.X + glyphSize.Width, e.Bounds.Y),
new Size(e.Bounds.Width - glyphSize.Width, e.Bounds.Height)),
s,
this.Font,
false,
state);
}
}
Примечание метод GetCheckBoxState()
. То, что вы получаете в DrawItemEventArgs
, - это DrawItemState
, а не CheckBoxState
, вам нужно, поэтому вам нужно перевести, и здесь меня начали спускать.
Солдат, если хотите, это должно вас начать. Но я думаю, что это будет грязный, длинный путь.
Вы можете быть заинтересованы в [лучшем решении] (http://stackoverflow.com/q/15532639/643085) к этой проблеме (и любым другим проблемам UI-конкретнее вы можете думать) –