2017-06-12 65 views
1

我有一個textboxTextChanged事件,並且它的每當用戶鍵入內容時,反斜槓將自動添加到文本框的末尾,如果已經沒有。設置文本框脫字符的最後可能位置

這可以正常工作,除非用戶將光標置於文本框末尾的反斜槓和類型之後,它將反斜槓移動到左側,添加新文本,然後在末尾添加另一個反斜槓。

例如,用戶輸入C並出現C\。現在,如果他們在\之後點擊並鍵入a,則出現C\a\,當我想要的只是Ca\

所以我需要一種方法來設置光標在文本框中的最後一個位置,直到反斜槓之前,如果用戶試圖將它設置在反斜槓之後。

下面是TextChanged事件代碼:

private void batchRootFolderText_TextChanged(object sender, EventArgs e) 
{ 
    if (!batchRootFolderText.Text.EndsWith("\\")) 
    { 
     batchRootFolderText.Text = batchRootFolderText.Text + "\\"; 
    } 
} 
+0

這很奇怪的行爲或'TextBox'如果你問我。你能告訴你爲什麼要這樣做?要點是,當用戶完成後(焦點丟失或按下按鈕),您可以在稍後進行一些改變,而不一定在每次文字改變之後,而他還沒有完成。 – Sinatr

+0

是的,這很奇怪,但用戶每次輸入文字時都會特別要求這樣做。如果我最終可以在最後按下按鈕來使用該文本,那會更好。 – pfinferno

回答

0
private void batchRootFolderText_TextChanged(object sender, EventArgs e){ 
    if (!batchRootFolderText.Text.EndsWith("\\")){ 
     String temp = batchRootFolderText.Text; 
     temp = temp.Substring(0, MyString.Length - 1); 
     batchRootFolderText.Text = temp + "\\"; 
    } 
} 

試圖切割字符串的結束掉,然後取代它?

+0

這不會產生正確的行爲。例如,輸入'c'會產生'c \'。但是如果用戶將插入符號放在反斜槓的右側並再次鍵入'c',則會出現'c \\'而不是'cc \'。 – pfinferno

0

您可以添加一個變量需要時,將保持在反斜槓是跟蹤和「動」它來結尾:當角色被用戶刪除

int backSlashIndex = -1; 

private void batchRootFolderText_TextChanged(object sender, EventArgs e) 
{ 
    if (!batchRootFolderText.Text.EndsWith("\\")) 
    { 
     if(backSlashIndex != -1) 
     { 
      var fullText = batchRootFolderText.Text; 

      var beforeBackslashText = fullText.Substring(0, backSlashIndex); 
      var afterBackslashText = fullText.Substring(backSlashIndex + 1, fullText.Length - beforeBackslashText.Length - 1); 

      batchRootFolderText.Text = beforeBackslashText + afterBackslashText; 
     } 

     batchRootFolderText.Text = batchRootFolderText.Text + "\\"; 
     backSlashIndex = batchRootFolderText.Text.Length - 1; 
    } 
} 

記住添加處理的情況下,或當用戶自己輸入反斜槓字符時。

0

您可以設置與SelectionStart財產光標位置: https://msdn.microsoft.com/en-us/library/system.windows.controls.textbox.selectionstart(v=vs.110).aspx

在SelectionChanged事件(https://msdn.microsoft.com/en-us/library/system.windows.controls.primitives.textboxbase.selectionchanged(v=vs.110).aspx),您可以檢查,如果光標是在文本的結束,如果文本用反斜槓結束並調整位置。

if (textBox.SelectionStart == textBox.Length - 1 && textBox.Text.EndsWith(@"\") 
    textBox.SelectionStart = textBox.Length - 2; 

此代碼應該做的工作。

+0

該事件只在WPF(我認爲),這是爲winforms。 – pfinferno

+0

哦,這是正確的。只是自己檢查。但是你仍然可以在MouseUp和KeyUp事件中實現它。我認爲鼠標和鍵盤應該是用戶改變插入位置的唯一方式;) – Serraniel

相關問題