2

我见过很少的教程声称可以在线解决这个问题,但它们不起作用。当按下 TAB 键时,我想在我的多行文本框中插入一个 TAB 空格。

微软的一个花花公子回应是,按照设计,如果您在 TextBox 内按 TAB,Metro 应用程序会将焦点转移到下一个控件。现在,如果您在单行文本框上按 TAB,这将是有意义的。但是在多行文本框中?您不认为用户想要插入 TAB 的可能性更大吗?

是的,我知道,您可以通过按 Ctrl+TAB 在 Metro TextBox 中插入 TAB 空格。但这很容易出错,因为我们大多数人都习惯于按 TAB 键,而且旧习惯有时很难改掉。

这是我的问题。我的应用程序有一个文本编辑器功能,用户可能需要输入大量数据。而且您知道人们喜欢什么,他们喜欢将事物分开以使他们的文本文档更具可读性,并且使用 Ctrl+TAB 非常不舒服和乏味。所以我想知道是否有人可以帮助解决这个问题(但它不能涉及 RichTextBox)?

另外,如果我设法找到解决方法,这是否会增加我的应用发布被商店拒绝的机会?

4

3 回答 3

2

订阅 TextBox 的 KeyPress 事件,通过检查所按下键的 KeyCode 来捕获 Tab 键,然后将 KeyEventArgs 的 Handled 属性设置为 true,这样该键就不会传递给任何其他控件。

使用 SendKeys 将“Tab”字符发送到 TextBox 以模仿按“Ctrl+Tab”的行为,如您所说:

TextBox_KeyPress(object sender, System.Windows.Forms.KeyEventArgs e)
{
      if (e.KeyCode == Keys.Tab)
      {
          e.Handled = true;
          SendKeys(^{TAB});
      }
}

胡萝卜 (^) 代表 CTRL 键。

于 2013-01-16T16:16:12.580 回答
1
richTextBox1.AcceptsTab = true;
于 2017-02-10T18:35:17.590 回答
0

在文本框控件的KeyPress 事件中。确保您在文本框控件上为多行设置了属性 true 如果您使用的是我建议的 RichText 控件,这将起作用

if (e.Key == Windows.System.VirtualKey.Tab) 
{
    e.Handled = true;
    string SelectionText = "";
    TextBox.Document.Selection.GetText(Windows.UI.Text.TextGetOptions.None, SelectionText);
    TextBox.Document.Selection.TypeText(char(9) + SelectionText);
}
于 2013-01-16T16:13:46.360 回答