我见过几篇声称可以在线解决此问题的教程,但它们不起作用。我想在按下TAB键时插入一个TAB空间,进入我的多行 TextBox。
微软的回应是,按照设计,如果你在TextBox中按TAB,Metro应用程序会将焦点集中到下一个控件上。现在,如果您在单行TextBox上按TAB,这将是有意义的。但在多行TextBox?您是否认为用户更希望插入TAB?
是的,我知道,您可以通过按Ctrl + TAB在Metro TextBox中插入TAB空间。但这很容易出错,因为我们大多数人都习惯于按TAB,老习惯有时会很难。
这是我的问题。我的应用程序有文本编辑器功能,用户可能需要输入大量数据。而且你知道人们是什么样的,他们喜欢将事物分开以使他们的文本文档更具可读性,使用Ctrl + TAB非常不舒服并且更加乏味。所以我想知道是否有人可以帮助解决此问题(但它不能涉及RichTextBox)?
此外,如果我设法找到解决方法,这是否会增加商店拒绝我的应用发布的机会?
答案 0 :(得分:3)
订阅TextBox的KeyPress事件,通过检查按下的键的KeyCode捕获Tab键,然后将KeyEventArgs的Handled属性设置为true,这样键就不会传递给任何其他控件。
使用SendKeys向TextBox发送“Tab”字符,以模仿按“Ctrl + Tab”的行为,就像你说的那样:
TextBox_KeyPress(object sender, System.Windows.Forms.KeyEventArgs e)
{
if (e.KeyCode == Keys.Tab)
{
e.Handled = true;
SendKeys(^{TAB});
}
}
胡萝卜(^)代表CTRL键。
答案 1 :(得分: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);
}
答案 2 :(得分:0)
richTextBox1.AcceptsTab = true;
答案 3 :(得分:0)
此代码用于设置制表空间的自定义长度
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;
using Windows.UI.Xaml.Input;
// ...
void OnTextBoxKeyDown(object sender, KeyRoutedEventArgs args)
{
if (args.Key == Windows.System.VirtualKey.Tab)
{
TextBox textBox = (sender as TextBox);
textBox.SelectedText = " ";
textBox.Select(textBox.SelectionStart + 4, 0);
args.Handled = true;
}
}