2017-01-02 79 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; 
    } 
    
相关问题