根据用户请求,我按照answer的建议实施了NumericUpDown,其中包含不同的增量(箭头按下0.1,按SHIFT + 0.01按箭头按下)。当用户与鼠标交互以按下控件的箭头时,它非常有效。
但是,按下SHIFT时,带有向上箭头的键盘输入不会触发UpButton()(对于Down键和DownButton()相同)。而是选择控件中的文本。由于正常行为是在按下键盘箭头时触发两种方法,当然我也希望为SHIFT组合保持此功能。
到目前为止,我已经尝试覆盖NumericUpDown中包含“Key”字的所有方法,但没有人可以帮助我。 ProcessCmdKey可以检测组合键并禁用默认选择行为,但它也不会导致UpButton / DownButton被触发。
有什么想法吗?
答案 0 :(得分: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);
}