CheckedListBox
是一個 Windows Forms 控件,用于顯示帶有復選框的項目列表
DrawMode
屬性:將 CheckedListBox
的 DrawMode
屬性設置為 OwnerDrawFixed
或 OwnerDrawVariable
。這將允許你自定義項目的繪制方式。checkedListBox1.DrawMode = DrawMode.OwnerDrawFixed;
DrawItem
事件:為 CheckedListBox
控件的 DrawItem
事件添加一個事件處理程序。在此處理程序中,你可以自定義項目的繪制方式。checkedListBox1.DrawItem += CheckedListBox1_DrawItem;
DrawItem
事件處理程序中自定義繪制:在事件處理程序中,你可以使用 Graphics
對象和其他屬性(如 Font
、ForeColor
等)來自定義項目的繪制方式。private void CheckedListBox1_DrawItem(object sender, DrawItemEventArgs e)
{
// 獲取 CheckedListBox 控件
CheckedListBox clb = (CheckedListBox)sender;
// 繪制背景
e.DrawBackground();
// 獲取項目文本
string itemText = clb.GetItemText(clb.Items[e.Index]);
// 獲取項目的復選框狀態
CheckState checkState = clb.GetItemCheckState(e.Index);
// 自定義繪制復選框
Rectangle checkBoxRect = new Rectangle(e.Bounds.X + 2, e.Bounds.Y + 2, 14, 14);
ControlPaint.DrawCheckBox(e.Graphics, checkBoxRect, ButtonState.Normal | GetButtonState(checkState));
// 自定義繪制項目文本
Rectangle textRect = new Rectangle(e.Bounds.X + 20, e.Bounds.Y, e.Bounds.Width - 20, e.Bounds.Height);
TextRenderer.DrawText(e.Graphics, itemText, clb.Font, textRect, clb.ForeColor, TextFormatFlags.Left | TextFormatFlags.VerticalCenter);
// 繪制焦點框
e.DrawFocusRectangle();
}
private ButtonState GetButtonState(CheckState checkState)
{
switch (checkState)
{
case CheckState.Checked:
return ButtonState.Checked;
case CheckState.Indeterminate:
return ButtonState.Mixed;
default:
return ButtonState.Normal;
}
}
通過這些步驟,你可以實現 CheckedListBox
控件的自定義繪制。你可以根據需要調整繪制代碼,以實現所需的外觀和樣式。