2013-01-16 75 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; 
     } 
    }