當我使用TComboBox
時,用戶可以通過單擊控件並選擇並使用鼠標選擇項目,或者可以將光標懸停在控件上並使用滾輪選擇項目,或者可以使用鍵盤當選擇控件時。禁用TComboBox中的鼠標滾輪和鍵盤事件
如何禁用鼠標滾輪和鍵盤事件,以便用戶可以隨時單擊控件,當他們想改變的價值?我想防止他們意外改變價值。如果這是不可能的TComboBox
,有一些其他組合框控件,我可以用?
對於按鍵,我試圖禁用KeyDown事件組合框,但選擇仍然改變。 TComboBox
似乎沒有鼠標滾輪事件。
當我使用TComboBox
時,用戶可以通過單擊控件並選擇並使用鼠標選擇項目,或者可以將光標懸停在控件上並使用滾輪選擇項目,或者可以使用鍵盤當選擇控件時。禁用TComboBox中的鼠標滾輪和鍵盤事件
如何禁用鼠標滾輪和鍵盤事件,以便用戶可以隨時單擊控件,當他們想改變的價值?我想防止他們意外改變價值。如果這是不可能的TComboBox
,有一些其他組合框控件,我可以用?
對於按鍵,我試圖禁用KeyDown事件組合框,但選擇仍然改變。 TComboBox
似乎沒有鼠標滾輪事件。
你也可以繼承的組合框的WindowProc
財產攔截並丟棄滾動和鍵盤窗口消息:
private:
TWndMethod PreviousWndProc;
__fastcall TMyForm::TMyForm(TComponent *Owner)
{
PreviousWndProc = ComboBox1->WindowProc;
ComboBox1->WindowProc = &ComboBoxWndProc;
}
void __fastcall TMyForm::ComboBoxWndProc(TMessage &Message)
{
if (
((Message.Msg < WM_KEYFIRST) || (Message.Msg > WM_KEYLAST))
&& (Message.Msg != WM_MOUSEWHEEL)
)
{
PreviousWndProc(Message);
}
}
變更值組合框具有焦點。因此,可能的解決方法是在CloseUp事件處理程序中刪除焦點,該處理程序在用戶選擇值後調用。但是,這並不能完全禁用事件。用戶仍然可以使用Tab鍵選擇控件,並以此方式獲得焦點。
要在特寫鏡頭處理上移除焦點,它似乎是不夠的父窗體的Focused
屬性設置爲NULL
。您必須將焦點移至另一個控件。 TEdit
似乎有最小的副作用。要將其隱藏,請將寬度和高度設置爲1,並將AutoSize
和TabStop
設置爲false。 Enable
和Visible
必須是真實的。
void __fastcall TForm1::ComboBox1CloseUp(TObject *)
{
// Remove focus from this control to prevent changing value
// when drop down list is closed
if (OtherControl->CanFocus()) {
OtherControl->SetFocus();
}
}
你可能只是想設置'Style'屬性'csDropDownList'。我想你會需要重寫組合類或手動處理所有事件以達到所需的行爲。 – 2016-11-22 09:54:40
@RawN Style屬性已經'CsDropDownList',但似乎並沒有影響到鼠標和鍵盤的行爲。 –