下面的代码工作正常,但是如果我的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);
}
答案 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);
}