监视击键

时间:2010-03-06 15:28:11

标签: c# winforms events keystroke

我是C#的初学者,并制作计算器。但我想禁用“GO!”按钮,当textbox1中没有输入数字时,一旦用户在其中输入数字“GO!”按钮再次启用...如何在C#中执行此操作?我尝试过这样的KeyDown和KeyPress事件,但从未工作过

private void Form1_Load(object sender, EventArgs e)
    {

            button15.Enabled = false;
         button16.Enabled = false;     

    }


 private void textBox1_KeyPress(object sender, System.Windows.Forms.KeyEventArgs e)
    {

       if (e.KeyCode < Keys.D0 || e.KeyCode > Keys.D9)
        {
            button15.Enabled = true;
            button16.Enabled = true;

        }
        else
        {
            button15.Enabled = false;
            button16.Enabled = false;
        }

    } 

那怎么办呢? 提前谢谢。

4 个答案:

答案 0 :(得分:7)

你的想法很不错但有更好的方法。只需检测文本框的内容何时更改。当内容改变时,检查内容是否为空或不为空。如果内容为空,则禁用该按钮,否则启用它。

http://msdn.microsoft.com/en-us/library/system.windows.forms.control.textchanged.aspx

此外,您最好将控件的名称更改为默认值以外的其他名称。 “button15”告诉读者没有任何代码,“goButton”。

答案 1 :(得分:3)

private void textBox1_TextChanged(object sender, EventArgs e)
{
      if(String.IsNullOrEmpty(textBox1.Text))
      {
            button15.Enabled = false;
            button16.Enabled = false;
      }
      else
      {
            button15.Enabled = true;
            button16.Enabled = true;
      }
}

答案 2 :(得分:3)

您需要检查文本框值是否可以实际转换为数字。检查数字是不够好的,你会接受像“4”这样的坏事或拒绝像“1e3”这样的好事。请使用有意义的控件名称,这样您就不会意外启用错误的控件。例如:

private void txtOperand_TextChanged(object sender, EventArgs e) {
  double value;
  btnGo.Enabled = double.TryParse(txtOperand.Text, out value);
}

对于你的计算器来说,这可能不够好,但演示了这种方法。

答案 3 :(得分:1)

如何使用TextChanged事件,然后检查文本框是否为空或其中包含某些内容并相应地启用或禁用该按钮?

此外,如果您使用的是WPF,则可以为GO按钮编写一个命令,该命令将自动处理命令的激活和停用(以及任何订阅它的控件)。您的激活逻辑只是检查文本框中是否有文本。