2017-01-02 38 views
0

我試圖阻止某些字符被大寫,而所有其它的必須是。轉換一個字符串的所有字符爲大寫,除了一些特定字符

因爲如果我寫在文本框中東西的例子,它會自動寫到大寫的所有字符,但每次我輸入字母「K」它必須是小寫。

是否有任何人知道實現這一目標的一種方式?

private void textBox3_TextChanged(object sender, EventArgs e) 
{ 
    // Navn/Name Text Box 


} 
+0

我建議下一次添加一個「的WinForms」標籤的問題,讓人們可以知道容易,如果如果是WPF中,的WinForms,ASP.NET,Silverlight的,等等 – bradbury9

+0

其實,我覺得更重要的部分是修改字符串,而不是將結果寫入文本框。所以我不會考慮'winforms'標籤... – wkl

+0

@wkl這就是爲什麼我會說這個問題太廣泛了。它提出了兩個問題。第一個是_「如何選擇性地更改字符串中的字符外框?」_,另一個是「我在用戶輸入時如何在WinForms文本框中更改文本?」_。我也很確定這兩個問題都是單獨提出的。 – CodeCaster

回答

3

在你textBox3_TextChanged事件處理程序,你可以簡單地「正確」的文本,將其設置回。
你必須記住的光標位置(和選擇),而敲擊鍵盤,因此用戶不會被打斷:

private void textBox3_TextChanged(object sender, EventArgs e) 
{ 
    int start = textBox3.SelectionStart; 
    int length = textBox3.SelectionLength; 
    textBox3.Text = textBox3.Text.ToUpper().Replace("K", "k"); 
    textBox3.SelectionStart = start; 
    textBox3.SelectionLength = length; 
} 

注:這是Windows.Forms的。我猜想對於wpf或asp或其他ui框架,光標處理的部分將有所不同。

2

這裏一個方法

private void textBox3_TextChanged(object sender, EventArgs e) 
{ 
    textBox3.Text = new string(textBox3.Text.Select(x => x == 'k' || x == 'K' ? 'k' : char.ToUpper(x)).ToArray()); 
} 
-1

如果你不想讓用戶輸入無效的輸入,就可以使用TextChanged事件(其他答案)或處理的KeyDown和KeyUp事件。檢查此鏈接的其他方法。

https://msdn.microsoft.com/en-us/library/ms171537(v=vs.110).aspx

+1

不,您**不要**使用KeyDown和KeyUp事件進行輸入驗證。人們可以用鼠標來改變文本(拖動它,或通過上下文菜單剪切或粘貼),還有其他方法可以修改控件的內容,而不是通過鍵盤或鼠標。 – CodeCaster

0
  1. 首先,你保持插入位置 - 光標所在。
  2. 然後,你計算新的字符串 - 我提取的情況,如果它不只是1個字母。
  3. 最後,您保存新的字符串,插入符返​​回到其位置。

    private static bool CalculateConditionForLowerCase(string stringLetter) 
    { 
        return stringLetter.ToLower() == "k"; 
    } 
    
    private void textBox1_TextChanged(object sender, EventArgs e) 
    { 
        if (string.IsNullOrEmpty(textBox1.Text)) 
        { 
         return; 
        } 
        var caretPosition = textBox1.SelectionStart; 
        var sb = new StringBuilder(); 
        foreach (var letter in textBox1.Text) 
        { 
         var stringLetter = letter.ToString(); 
         sb.Append(CalculateConditionForLowerCase(stringLetter) ? stringLetter.ToLower() : stringLetter.ToUpper()); 
        } 
        textBox1.Text = sb.ToString(); 
        textBox1.SelectionStart = caretPosition; 
    } 
    
相關問題