gpt4 book ai didi

c# - 取消 PreviewKeyDown

转载 作者:太空宇宙 更新时间:2023-11-03 13:03:19 27 4
gpt4 key购买 nike

当输入光标位于文本框中时,我想捕获箭头键,做一些处理然后阻止这个事件被输入处理。

KeyPress 事件中,我们有 KeyPressEventArgs,我们可以将其放入 e.Handled=false;去处理。但是箭头键不会触发 KeyPress 事件。

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

Msdn Control.PreviewKeyDown Event

但似乎 e.Handled=false; 也不起作用。

这是我当前的代码

private void textBox1_PreviewKeyDown(object sender, PreviewKeyDownEventArgs e)
{
if (e.KeyCode == Keys.Right || e.KeyCode == Keys.Left)
e.IsInputKey = true;
}

private void textBox1_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Right || e.KeyCode == Keys.Left)
{
// some other treatment [...]
e.Handled = false;
}
}

enter image description here

我想更改 TextBox 中移动光标的默认按下箭头行为。我不希望“r”和“l”(上图)之间的打字光标能够移动。

有什么建议吗?

最佳答案

这个问题含糊不清,它没有描述需要不同操作的特定光标键。重要的是,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 以确保击键不会传递到控件。

关于c# - 取消 PreviewKeyDown,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31673415/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com