【问题标题】:TextBox Accepts Tab keyTextBox 接受 Tab 键
【发布时间】:2012-09-15 06:36:00
【问题描述】:

如果我将 TextBox 属性 AcceptsTab 设置为 True TextBox_KeyDown 事件中的此条件不起作用。

if (e.KeyCode == Keys.Tab)
{
     if ((e.Control) && (e.Shift))
     {
         e.Handled = true;
         if (Tabs.SelectedIndex > 0)
             Tabs.SelectedIndex = Tabs.SelectedIndex - 1;
         else
             Tabs.SelectedIndex = Tabs.TabPages.Count - 1;
     }
     else if (e.Control)
     {
         e.Handled = true;
         if (chatFormTabs.SelectedIndex < chatFormTabs.TabPages.Count - 1)
             chatFormTabs.SelectedIndex = chatFormTabs.SelectedIndex + 1;
         else
             chatFormTabs.SelectedIndex = 0;
     }
}

我希望在 Form KeyDown 事件中出现这种情况,但它不适合我。

谁能建议我如何做到这一点:

  • TextBox 将接受 Tab 键并将 "\t" 字符添加到当前位置。
  • 我将能够通过 Ctrl+Tab 或 Ctrl+Shift+Tab 更改选项卡。

【问题讨论】:

  • 覆盖表单的 ProcessCmdKey() 方法。您希望用户如何发现这一点?
  • @HansPassant 非常感谢!这正是我想要的。

标签: c# winforms .net-3.5 textbox


【解决方案1】:

除非您处于多行模式,否则文本框不会接受选项卡。通过将 multiline 属性设置为 true 来切换到多行模式。然后,在文本框控件的 KeyPress 事件中添加以下内容。

if (e.KeyChar == '\t' || e.KeyChar== (char)13)
            e.Handled = true;

以上代码的意思是,当tab或enter键被按下时,默认不做任何事情。

之后,将以下代码添加到文本框控件的 KeyDown 事件中:

  if (e.KeyCode == Keys.Tab)
  {
     textBox1.AppendText(@"\t");
  }

在上面代码的大括号内,处理按下 Tab 键时你想做的任何事情。

【讨论】:

  • 我现在和你一样。但是我在我的问题中是如何写的,现在我不能使用Ctrl+Tab 来更改Tabs。我不知道该怎么办。
【解决方案2】:

试试PreviewKeyDown event。我有一个类似的问题(接受箭头键),效果很好。

【讨论】:

  • 这是最好的解决方案。它使您不必获得自己的控制权。
  • 基本上,在PreviewKeyDown 事件中,您检查if (e.KeyCode == Keys.Tab) e.IsInputKey = true;
【解决方案3】:

TextBox.TabStop Property TextBoxBase.AcceptsTab Property 您可以使用 TabStop 属性来指定是否可以使用 TAB 键将焦点移动到控件。读/写布尔值。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-07-06
    • 1970-01-01
    • 2015-11-01
    • 1970-01-01
    • 2016-07-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多