我有一个MaskedTextBox,可以将文本格式化为(###)### - ####
输入前3位后,他们喜欢按" TAB"到下一组。不幸的是,通过按TAB,他们就在下一个领域。
所以我的老板让我修改应用程序,以便用户保持在同一个字段中,但光标位于下一组。
private void maskedTextBoxHomePhone_KeyPress(object sender, KeyPressEventArgs e)
{
MaskedTextBox mtb = (MaskedTextBox)sender;
if (e.KeyChar == (char)Keys.Tab)
{
if (mtb.TextLength == 3)
{
mtb.SelectionStart = 4;
}
}
}
我也试过
private void maskedTextBoxHomePhone_KeyDown(object sender, KeyEventArgs e)
{
MaskedTextBox mtb = (MaskedTextBox)sender;
if (e.KeyCode == Keys.Tab)
{
if (mtb.TextLength == 3)
{
mtb.SelectionStart = 4;
}
}
}
答案 0 :(得分:0)
选项卡具有特殊含义,会导致焦点发生变化,因此不会调用事件处理程序。
您可以通过使用文本框的Leave事件并计算存储在某个局部变量中的textlength来解决此问题:
private void maskedTextBoxHomePhone_Leave(object sender, EventArgs e)
{
if (_mtbTextLength == 3) { //change selection start and goes back to masked text box }
}
无论如何,实际上我会试着说服我的老板。你呢 真的需要这个?标签总是用来改变字段,你可以得到 你的用户很困惑。
另一种选择是通过覆盖ProcessCmdKey来改变Tab行为:
protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
{
if (keyData == Keys.Tab)
{
//Do something
}
}