取消PreviewKeyDown

时间:2015-07-28 10:15:32

标签: c# winforms keyboard-events

当键入光标在文本框中时,我想要抓住箭头键, 做一些处理然后防止这个事件被输入处理。

$drive=gwmi win32_logicaldisk -Filter "deviceid='c:'" $usedspace = $drive.Size -$drive.FreeSpace 活动中,我们可以KeyPress KeyPressEventArgs 处理。 但箭头键不会触发e.Handled=false;事件。

我已尝试使用KeyPress然后使用int e.IsInputKey = true;事件,如MS所说。

Msdn Control.PreviewKeyDown Event

但似乎KeyDown也不起作用。

这是我目前的代码

e.Handled=false;

enter image description here

我想更改TextBox中默认的按箭头行为,它会移动光标。我不想在" r"之间键入光标。和" l" (上图)可以移动。

有什么建议吗?

1 个答案:

答案 0 :(得分:1)

问题很模糊,它没有描述需要采取不同行为的特定光标键。重要的是,TextBox已经将右和左光标键转换为输入键。这样他们就不会被用于控制之间的导航。如果要拦截向上/向下光标键,则只需要PreviewKeyDown。在KeyDown事件处理程序中实现行为。

意图也很模糊,我只是给出一个非常愚蠢的例子来交换光标键的方向:

    private void textBox1_KeyDown(object sender, KeyEventArgs e) {
        var box = (TextBox)sender;
        if (e.KeyData == Keys.Left) {
            if (box.SelectionStart < box.Text.Length)
                box.SelectionStart++;
            e.Handled = true;
        } else if (e.KeyData == Keys.Right) {
            if (box.SelectionStart > 0)
                box.SelectionStart--;
            e.Handled = true;
        }
    }

请注意e.Handled必须如何设置为 true ,以确保键击不会传递给控件。