C#如何在文本框为空时阻止按Tab键

时间:2014-12-26 19:19:43

标签: c# winforms

下面的代码工作正常,但是如果我的textbox.text为空,如何将if逻辑放入ProcessCmdKey事件中,如何停止tab键?

bool a = true;
protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
{
    if (keyData == Keys.Tab && !a)
    {
        return true;
    }
    return base.ProcessCmdKey(ref msg, keyData);
}

2 个答案:

答案 0 :(得分:6)

覆盖ProcessTabKey(),如果要抑制Tab移动,则返回true。你可以检查this.ActiveControl,如果你想让它只适用于TextBoxes。

这里的一个版本只会抑制" SelectTextBoxes"中列出的那些TextBox的Tab。列表:

public partial class Form1 : Form
{

    public Form1()
    {
        InitializeComponent();
        SelectTextBoxes = new List<TextBox>() { textBox1, textBox2, textBox3 }; // list the textboxes here
    }

    private List<TextBox> SelectTextBoxes = new List<TextBox>(); 

    protected override bool ProcessTabKey(bool forward)
    {
        Control ctl = this.ActiveControl;
        if (ctl != null && ctl is TextBox)
        {
            TextBox tb = (TextBox)ctl;
            if (SelectTextBoxes.Contains(tb) && tb.Text.Length == 0)
            {
                return true;
            }
        }
        return base.ProcessTabKey(forward); // process TAB key as normal
    }

}

答案 1 :(得分:1)

将代码修改为以下内容:

protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
{
    if (keyData == Keys.Tab && string.IsNullOrEmpty(textbox.Text))
        return true;

    return base.ProcessCmdKey(ref msg, keyData);
}