2013-01-16 50 views
2

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

微软的帅哥响应是,按照设计,Metro应用程序会将焦点带到下一个控件,如果您在TextBox中按Tab键。现在,如果您在单行TextBox上按TAB,这将是有意义的。但在多行文本框?你不觉得用户更愿意插入TAB吗?

是的,我知道,您可以通过按Ctrl + Tab在Metro文本框中插入TAB空间。但是这很容易出错,因为我们大多数人习惯于按TAB键,而有时老的键会变得很难。

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

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

+0

你有你没有响应的原因是因为它以纯文本输入字段的标准行为TAB你移动到下一个场。为什么你不能使用RichEditBox?当你想把格式设置为输入的一部分时,这就是要使用的控件。 – devhammer

+0

Hello @ devhammer,在WindowsForms和WPF桌面应用程序中,您可以按TAB并在纯文本框中使用TAB空格。这就是人们所期待的。有些人甚至不会考虑尝试Ctrl + TAB组合。话虽如此,我收到的答复是预料之中的,而且我对微软的这个新设计选择没有任何问题,事实上有很多人向我抱怨,如果他们抱怨,那么很有可能从商店下载我的应用程序的人可能会抱怨,而且似乎没有任何事情可以为他们做。 – Tommy

+0

你不能把'AcceptsTab'属性设置为'true'吗? – antonijn

回答

3

订阅您的文本框的KeyPress事件工作设置为true,捕获通过检查所按键的KeyCode选项卡键,然后将KeyEventArgs的Handled属性设置为true,以便键不会传递到任何其他控件。

使用的SendKeys发送一个 “标签” 字符的文本框,以模仿按下 “Ctrl + Tab键”,像你说的行为:

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

胡萝卜(^)表示CTRL键。

+0

哦谢谢@glace,我得到了这个工作! – Tommy

+0

@jAsOn我很高兴你能够正常工作,并发现我的评论很有帮助!如果你发现了这个问题,请将问题标记为答案来解决问题,或者如果你用自己的想法解决问题,请用自己的答案更新问题。 :) –

+0

对不起。 – Tommy

0

在您的KeyPress事件您的文本框控件。请确保您在属性上TextBox控件 多这如果您使用的是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); 
} 
+0

对不起,@DJ K,KeyChar不适用于Metro应用程序。他们相等。是:'if(e.Key == Windows.System.VirtualKey.Tab){}' – Tommy

+0

jAsOn我没有意识到这是Metro App。我会改变/改变我的答案..感谢敏锐的目光 – MethodMan

+0

对不起,@DJ K,'AppendText'不存在于Metro风格应用程序的'TextBox'控件中。我也尝试了一些其他类似的版本,比如获取插入符的当前位置,然后插入一个TAB空格,然后将插入符的位置设置到该TAB空格的末尾,但由于某些原因,这不起作用如预期。 – Tommy

0
richTextBox1.AcceptsTab = true; 
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; 
     } 
    }