我想将输入文本框的所有字符更改为大写字母。代码将添加字符,但如何将插入符号移到右侧?
private void textBox3_KeyPress(object sender, KeyPressEventArgs e)
{
textBox3.Text += e.KeyChar.ToString().ToUpper();
e.Handled = true;
}
答案 0 :(得分:18)
将TextBox
的{{3}}属性设置为Upper
;那么你不需要手动处理它。
请注意,textBox3.Text += e.KeyChar.ToString().ToUpper();
会将新字符附加到字符串的末尾,即使输入插入符号位于字符串的中间(大多数用户会发现它非常混乱)。出于同样的原因,我们不能假设在输入字符后输入插入符应出现在字符串的末尾。
如果您仍然真的想在代码中执行此操作,那么这样的事情应该有效:
// needed for backspace and such to work
if (char.IsControl(e.KeyChar))
{
return;
}
int selStart = textBox3.SelectionStart;
string before = textBox3.Text.Substring(0, selStart);
string after = textBox3.Text.Substring(before.Length);
textBox3.Text = string.Concat(before, e.KeyChar.ToString().ToUpper(), after);
textBox3.SelectionStart = before.Length + 1;
e.Handled = true;
答案 1 :(得分:12)
tbNumber.SelectionStart = tbNumber.Text.ToCharArray().Length;
tbNumber.SelectionLength = 0;
答案 2 :(得分:2)
private void txtID_TextChanged(object sender, EventArgs e)
{
txtID.Text = txtID.Text.ToUpper();
txtID.SelectionStart = txtID.Text.Length;
}
答案 3 :(得分:1)
这将保留插入点的位置(但我会按照FredrikMörk给出的答案继续)
private void textBox3_KeyPress(object sender, KeyPressEventArgs e)
{
int selStart = textBox3.SelectionStart;
textBox3.Text += e.KeyChar.ToString().ToUpper();
textBox3.SelectionStart = selStart;
e.Handled = true;
}
SelectionStart实际上可能被称为SelStart,我目前没有编译器。
答案 4 :(得分:1)
如果您必须手动执行此操作,则可以使用
private void textBox3_KeyPress(object sender, KeyPressEventArgs e)
{
textBox3.Text += e.KeyChar.ToString().ToUpper();
textBox3.SelectionStart = textBox3.Text.Length;
e.Handled = true;
}
但前面的代码会在文本末尾插入新字符。如果要将其插入光标所在的位置:
private void textBox3_KeyPress(object sender, KeyPressEventArgs e)
{
int selStart = textBox3.SelectionStart;
textBox3.Text = textBox3.Text.Insert(selStart,e.KeyChar.ToString().ToUpper());
textBox3.SelectionStart = selStart + 1;
e.Handled = true;
}
此代码在光标位置插入新字符,并将光标移动到新插入字符的左侧。
但我仍然认为设置CharacterCasing会更好。
答案 5 :(得分:0)
另一种方法是只改变KeyChar本身的值:
private void textBox1_KeyPress(object sender, KeyPressEventArgs e) {
if ((int)e.KeyChar >= 97 && (int)e.KeyChar <= 122) {
e.KeyChar = (char)((int)e.KeyChar & 0xDF);
}
}
尽管使用CharacterCasing属性是最简单的解决方案。