【问题标题】:Override Ctrl key in TextBox?覆盖文本框中的 Ctrl 键?
【发布时间】:2015-05-13 11:33:50
【问题描述】:

是否可以让文本框忽略 Ctrl + character 功能并重新分配 ctrl 键的不同用途?

情况:我在一个表单上有多个文本框。理想情况下,我希望文本框在输入单个字符后从一个文本框跳到另一个文本框。但是文本框可以有多个输入,在这种情况下,我希望用户在输入多个字符时按住 ctrl 以留在文本框上。

基本上,我希望我的 ctrl(如果按住的话)阻止文本框跳跃。

我尝试使用OnKeyDownOnKeyUpTextChanged 的组合来处理按下 Ctrl 键时的事件,但最后我无法输入任何内容按住 Ctrl 键后的数据。有没有办法解决这个问题?

这是因为 95% 的情况下它始终是 1 个字符。因此,为了快速遍历文本框,用户将点击单个字符。但是,如果用户希望输入 2 位数字,他们可以按住 Ctrl (因此它不会跳转到下一个文本框)并根据需要输入 2 位数字。

【问题讨论】:

  • 您当然可以以某种方式将Ctrl+SomeKey 转换为字符(参见this 等),但是您确定自己在做什么吗?在按下Ctrl 时,我听起来绝对不舒服(对我来说)。目前尚不清楚您要实现什么场景,以及为什么TextBox 在输入一个字符后会改变焦点。您能否提供一些代码并更好地解释它?也许有更好的解决方案。
  • 您在 UI 上执行的第一个可用性研究应该针对您的队友。希望他们可以畅所欲言,告诉你他们的想法。在不太可能的情况下不会阻止您,那么至少选择一个不会改变字符代码的键。没有人能很好地使用 ScrollLock 键。
  • @ Sinartr - 请参阅编辑了解这种奇怪情况背后的原因! :)
  • 你说digitsShift 似乎是一个更容易使用的键。很容易将# 变成3
  • 我明白你在做什么。使用设置为 150 毫秒的计时器怎么样?因此,只有在延迟过去并且在该时间范围内没有输入其他字符后,焦点才会转移。如果输入新字符,则重置计时器,使其再次从 0 计数到 150 毫秒。

标签: c# winforms


【解决方案1】:

就像评论者说的那样,从 UI 的角度来看,可能有更好的方法来做到这一点。你会按 CTRL 来防止切换文本框是奇怪的行为。话虽如此,在 KeyDown 中使用以下内容应该会让您得到您想要做的事情。

if (!(e.Control && char.IsLetterOrDigit((char) e.KeyCode)))
{
    return;
}

txtBox.Text += (new KeysConverter()).ConvertToString(e.KeyCode);
e.Handled = true;

【讨论】:

  • 谢谢!这引导我朝着正确的方向前进。抱歉回复晚了,我被调到其他项目了。
猜你喜欢
  • 2014-09-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-11-30
  • 1970-01-01
  • 2016-01-16
相关资源
最近更新 更多