在NumericUpDown

时间:2015-09-15 16:54:20

标签: winforms c++-cli numericupdown

根据用户请求,我按照answer的建议实施了NumericUpDown,其中包含不同的增量(箭头按下0.1,按SHIFT + 0.01按箭头按下)。当用户与鼠标交互以按下控件的箭头时,它非常有效。

但是,按下SHIFT时,带有向上箭头的键盘输入不会触发UpButton()(对于Down键和DownButton()相同)。而是选择控件中的文本。由于正常行为是在按下键盘箭头时触发两种方法,当然我也希望为SHIFT组合保持此功能。

到目前为止,我已经尝试覆盖NumericUpDown中包含“Key”字的所有方法,但没有人可以帮助我。 ProcessCmdKey可以检测组合键并禁用默认选择行为,但它也不会导致UpButton / DownButton被触发。

有什么想法吗?

1 个答案:

答案 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);
}