VS2010 WinForms 中 ComboBox 默認僅點擊下拉箭頭才展開,需實現點擊控件任意區域(包括文本框部分)均可展開下拉列表。
原生 ComboBox 無此屬性,DropDownStyle 僅控制是否可編輯,無「全區域點擊展開」選項。
public class FullClickComboBox : ComboBox {
protected override void WndProc(ref Message m) {
const int WM_LBUTTONDOWN = 0x0201;
if (m.Msg == WM_LBUTTONDOWN && DropDownStyle != ComboBoxStyle.Simple) {
DroppedDown = true;
}
base.WndProc(ref m);
}
}
攔截左鍵按下消息,強制設置 DroppedDown = true。
private void comboBox1_MouseClick(object sender, MouseEventArgs e) {
if (e.Button == MouseButtons.Left && !comboBox1.DroppedDown) {
comboBox1.DroppedDown = true;
}
}
在 MouseClick 事件中手動展開,注意避免重複觸發導致閃爍。
如 DevExpress, Telerik, ComponentFactory 等專業 UI 庫均提供該功能。
DropDownStyle = Simple 時控件始終展開,無需處理。