2015-09-15 25 views
0

根據用戶請求,我按照answer中的建議,實施了NumericUpDown,其變化量爲增量(0.1時爲箭頭按下,0.01爲SHIFT +箭頭按下)。當用戶與鼠標交互以按下控件的箭頭時,它工作得非常好。NumericUpDown中的Overrite移位行爲

但是,使用向上箭頭的鍵盤輸入在按下SHIFT時不會觸發UpButton()(對於Down鍵和DownButton()也是如此)。相反,控件中的文本正在被選中。由於正常行爲是爲了在按下鍵盤箭頭時觸發這兩種方法,當然我也希望爲SHIFT組合保留此功能。

到目前爲止,我已經嘗試覆蓋NumericUpDown中包含「Key」單詞的每個方法,但沒有人可以幫助我。 ProcessCmdKey可以檢測組合鍵並禁用默認的選擇行爲,但不會導致UpButton/DownButton被觸發。

任何想法?

+0

我已經改變了C++標籤C++ - 你顯然不是用C CLI ++ 。 –

回答

1

Shift +向上/向下是文本選擇快捷鍵,用於NumericUpdate的文本框部分。就像他們爲了一個普通的TextBox一樣。禁用此功能並不是最好的主意。

多種方式來做到這一點,也許最簡單的方法是檢測表單的ProcessCmdKey()方法的重寫中的擊鍵。所以他們會在任何NUD上工作,並且代碼更改很小。我會後它的C#版本,開創了C++/CLI WinForms應用程序太麻煩了,這些天:

protected override bool ProcessCmdKey(ref Message msg, Keys keyData) { 
    var ctl = this.ActiveControl as NumericUpDown; 
    if (ctl != null) { 
     if (keyData == (Keys.Up | Keys.Shift)) { 
      ctl.Value = Math.Min(ctl.Maximum, ctl.Value + 10 * ctl.Increment); 
      return true; 
     } 
     if (keyData == (Keys.Down | Keys.Shift)) { 
      ctl.Value = Math.Max(ctl.Minimum, ctl.Value - 10 * ctl.Increment); 
      return true; 
     } 
    } 
    return base.ProcessCmdKey(ref msg, keyData); 
}