我试图阻止某些字符被大写,而所有其它的必须是。转换一个字符串的所有字符为大写,除了一些特定字符
因为如果我写在文本框中东西的例子,它会自动写到大写的所有字符,但每次我输入字母“K”它必须是小写。
是否有任何人知道实现这一目标的一种方式?
private void textBox3_TextChanged(object sender, EventArgs e)
{
// Navn/Name Text Box
}
我试图阻止某些字符被大写,而所有其它的必须是。转换一个字符串的所有字符为大写,除了一些特定字符
因为如果我写在文本框中东西的例子,它会自动写到大写的所有字符,但每次我输入字母“K”它必须是小写。
是否有任何人知道实现这一目标的一种方式?
private void textBox3_TextChanged(object sender, EventArgs e)
{
// Navn/Name Text Box
}
在你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框架,光标处理的部分将有所不同。
这里一个方法
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());
}
如果你不想让用户输入无效的输入,就可以使用TextChanged事件(其他答案)或处理的KeyDown和KeyUp事件。检查此链接的其他方法。
https://msdn.microsoft.com/en-us/library/ms171537(v=vs.110).aspx
不,您**不要**使用KeyDown和KeyUp事件进行输入验证。人们可以用鼠标来改变文本(拖动它,或通过上下文菜单剪切或粘贴),还有其他方法可以修改控件的内容,而不是通过键盘或鼠标。 – CodeCaster
最后,您保存新的字符串,插入符返回到其位置。
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;
}
我建议下一次添加一个“的WinForms”标签的问题,让人们可以知道容易,如果如果是WPF中,的WinForms,ASP.NET,Silverlight的,等等 – bradbury9
其实,我觉得更重要的部分是修改字符串,而不是将结果写入文本框。所以我不会考虑'winforms'标签... – wkl
@wkl这就是为什么我会说这个问题太广泛了。它提出了两个问题。第一个是_“如何选择性地更改字符串中的字符外框?”_,另一个是“我在用户输入时如何在WinForms文本框中更改文本?”_。我也很确定这两个问题都是单独提出的。 – CodeCaster