2015-08-09 95 views
1

我想只允許一個字符的一個實例按順序出現在文本框中。換句話說,我想阻止用戶在我的文本框中輸入連續的重複字符。例如,如果我要製作一個計算器程序,我想防止用戶意外地輸入((而不是(只允許輸入一個字符的實例C#

+1

有趣的問題,我期待着答案 - 不能立即想到一個優雅的解決方案。 – VSO

+0

@VSO請澄清你認爲這個問題是關於什麼的,也考慮澄清文本框和數組拆分之間的關​​系。 –

+0

一個計算工具,做5 ++ 5沒有意義,5 + 5沒有意義 – Jeremy11232

回答

1

您可以檢測文本框的keydown事件。並且在這種情況下,你檢查最後和倒數第二個字符,看它是否相同。如果相同,則可以刪除字符串的最後一個字符。

但請記住,當用戶將整個字符串粘貼到文本框時,上述方法有問題。

+0

這與我想要的非常接近,但是是的,它會更好地檢測某些值的重複值,而不會將其作爲輸入的最後一個字符。 – Jeremy11232

+0

將字符串拆分爲單個字符。定義一個空數組uniqueChars。定義一個數組singleOnly。對字符串中的每個字符運行一個foreach循環。在循環中,檢查字符是否已經存在於唯一的字符數組中,如果不是,檢查它是否在singleOnly數組中。如果兩個條件均滿足,則將其添加到uniqueChars數組中。當你遇到重複的時候(已經在uniqueChars數組中,在你定義的角色中檢查dupe),刪除它。然後重新組合字符串並使用它。非常低效,但會做到這一點。編輯:其實列表可能在這裏更好。 – VSO

0

對於任何類似文本框的對象,該函數看起來都是一樣的,但當然要附加的事件會有所不同。假設的WinForms文本框,你會附加到TextChanged事件(即mytextbox.TextChanged = mytextbox_TextChanged),該函數將類似於下面的一個:

private void mytextbox_TextChanged(object sender, EventArgs e) 
{ 
    if (mytextbox.Text.Length < 2) { return; } 

    var stringToCheck = mytextbox.Text; 
    for (var i = 1; i <= stringToCheck.Length-1; i += 1) 
    { 
     if (stringToCheck[i].Equals(stringToCheck[i-1]) 
     { 
      mytextbox.Text = stringToCheck.Remove(i, 1); 

      // Next two lines put cursor at end of textbox instead of beginning 
      mytextbox.SelectionStart = mytextbox.Text.Length; 
      mytextbox.SelectionLength = 0; 
     } 
    } 

}