MaskedTextBox检测选项卡

时间:2016-08-02 14:13:59

标签: c# regex maskedtextbox

我有一个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;
            }
        }
    }

1 个答案:

答案 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
  }
}