2010-03-06 46 views
2

我是C#的初学者,正在制作计算器。但是我想禁用“GO!”按钮,当文本框1中没有输入数字时,并且一旦用户在其中输入数字“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; 
     } 

    } 

那么请问该怎么做? 在此先感谢。

回答

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; 
     } 
} 
+0

mmmmmm,我也不工作,按钮始终启用,试图禁用它们在form1_load但他们变得永久禁用! – rafael 2010-03-06 15:48:29

+0

您是否将此事件添加到设计器中的textBox1的TextChanged事件?你必须这样做才能使它工作,你不能只复制粘贴它。 – Phoexo 2010-03-06 15:50:49

+0

对不起,我不明白,我把它放在form1.cs文件中,我应该把它放在哪里? – rafael 2010-03-06 15:55:53

7

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

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

此外,它会为你的控件的名称更改为默认值以外的东西是个好主意。 “button15”告诉读者这段代码什么都没有,“goButton”的确如此。

1

如何使用TextChanged事件,然后检查文本框是否为空或者是否有内容,并相应地启用或禁用该按钮?另外,如果您使用的是WPF,则可以为您的GO按钮编写一个命令,该命令将自动处理命令(以及订阅该命令的任何控件)的激活和停用。您的激活逻辑将仅仅是检查文本框中是否有文本。

3

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

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

这可能对您的计算器来说还不够好,但是却演示了这种方法。