在文本框中插入一个制表符空格

3
我看到了一些声称可以解决这个问题的教程,但它们并没有起作用。我想在我的多行文本框中按下TAB键时插入一个TAB空格。
微软的一个人回复说,在TextBox中按TAB键时,Metro应用程序会将焦点带到下一个控件。现在,如果你在单行TextBox中按TAB键,这是有道理的。但是在多行TextBox中呢?难道你不认为用户更可能想要插入一个TAB吗?
是的,我知道,你可以通过按Ctrl+TAB在Metro TextBox中插入一个TAB空格。但这是容易出错的,因为我们大多数人习惯于只按TAB键,而且旧习惯有时很难改。
这是我的问题。我有一个文本编辑器功能,用户可能需要输入大量的数据。你知道人们喜欢把事情分开,以使他们的文本文档更易读,使用Ctrl+TAB非常不舒服和繁琐。所以我想知道是否有人能提供一个解决方法(不能涉及RichTextBox)?
此外,如果我成功找到一个解决方法,这会增加我的应用被商店拒绝的机会吗?

你得到的回应是因为在纯文本输入框中,按下TAB键会移动到下一个字段,这是标准行为。为什么你不能使用RichEditBox?当你需要格式作为输入的一部分时,那就是要使用的控件。 - devhammer
@AntonieBlom 对我来说,我讨厌Metro风格的应用有很多原因,但我仍然使用它们,因为其中一些功能实在太酷了,不能忽视。例如,我喜欢共享合同。我唯一不喜欢Metro应用程序的是一些不必要的限制。 - Tommy
@jAsOn 我刚刚创建了一个新的Windows Forms应用程序,并添加了两个文本框控件。我唯一能让它们接受制表符的方法是将Multiline属性设置为true,并将AcceptTabs设置为true。文本框控件的默认行为(我所说的)是使用Tab键从字段到字段移动。WPF也是如此。您必须更改默认设置才能获得所需的行为。 - devhammer
@devhammer 对不起,我可能误读了您的评论。收到。 - Tommy
1
@jAsOn 呵呵...不用道歉。也许我没有表达清楚。看起来在代码中处理TAB键是完成此操作的方法,因此希望下面的解决方案之一适用于您。 - devhammer
显示剩余4条评论
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键。


@jAsOn很高兴你解决了问题并且发现我的评论有所帮助! 如果你已经解决了这个特定的问题,请通过将其标记为“已回答”来关闭问题,或者如果您是通过自己的想法解决的,则更新问题并添加您自己的答案。 :) - B L

1
richTextBox1.AcceptsTab = true;

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);
}

抱歉,@DJ K,在Metro应用程序中,KeyChar无法使用。它们的等效方式是:if(e.Key == Windows.System.VirtualKey.Tab) { } - Tommy
对不起,我没意识到这是Metro应用程序。我会修改我的回答...感谢你的敏锐观察力。 - MethodMan
抱歉 @DJ K,AppendText 在 Metro 风格的应用程序中的 TextBox 控件中不存在。我已经尝试了几个类似的版本,比如获取插入点的当前位置,然后插入一个 TAB 空格,再将插入点设置为该 TAB 空格的结尾,但出乎意料地没有起作用。 - Tommy
刚看到你的评论,没问题 :) - Tommy

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接