我有一個WinForms組合框,記得以前輸入的項目。我想要一種方法來刪除以前的條目。我重寫ComboBox的DrawItem事件以將文本與X圖標一起渲染。 X圖標只是一個正方形的圖像,我可以縮放到該項目的高度。代碼非常簡單。捕獲ComboBox項目單擊
// Enable the owner draw on the ComboBox.
ServerComboBox.DrawMode = DrawMode.OwnerDrawFixed;
// Handle the DrawItem event to draw the items.
ServerComboBox.DrawItem += delegate(object cmb, DrawItemEventArgs args)
{
// Draw the default background
args.DrawBackground();
String url = (String)ServerComboBox.Items[args.Index];
// Get the bounds for the first column
Rectangle r1 = args.Bounds;
r1.Width -= r1.Height;
// Draw the text
using (SolidBrush sb = new SolidBrush(args.ForeColor))
{
args.Graphics.DrawString(url, args.Font, sb, r1);
}
// Draw the X icon
Rectangle r2 = new Rectangle(r1.Width+1, r1.Y + 1, r1.Height - 2, r1.Height - 2);
args.Graphics.DrawImage(Project.Test.Properties.Resources.CloseIcon, r2);
};
現在我的問題是如何捕獲如果X被點擊。我的第一個想法是捕獲ComboBox的MouseDown事件,並檢查DroppedDown屬性是否爲true,但只有當您單擊未展開的ComboBox時纔會觸發該事件。我如何從ComboBox的DropDown部分捕獲事件。一旦我明白了這一點,我認爲這不是一個很大的問題,搞清楚X是被點擊還是現在。
這肯定不是OP想要的。 –
@KingKing這裏很好的挑戰。繼續,通過顯示你可以在winforms中做到這一點來證明我錯了。 –
@HighCore幸運的是,我對'win32'中的'ComboBox'有一點經驗。看到我的答案,你可能想給我一個+1。 –