Vb.net 基于三个文本框字段禁用按钮

Vb.net 基于三个文本框字段禁用按钮,vb.net,winforms,textbox,Vb.net,Winforms,Textbox,我对VB.net(和VS 2008)很陌生,所以我担心我的问题可能是基本的,但我不知道如何解决它 我有一个winform,有三个文本框字段和一个按钮。在用户单击按钮继续之前,必须填写所有文本框字段。为此,我想禁用按钮,只要有至少一个空的文本框 如果我只有一个文本框字段,这对我来说很容易做到。在Textbox1\u Leave事件中,我将检查Textbox1.Text是否为空,如果为空,则设置Button1.Enabled=True 但是如果我有三个文本框该怎么办?有三个事件处理程序,每个文本框一

我对VB.net(和VS 2008)很陌生,所以我担心我的问题可能是基本的,但我不知道如何解决它

我有一个winform,有三个文本框字段和一个按钮。在用户单击按钮继续之前,必须填写所有文本框字段。为此,我想禁用按钮,只要有至少一个空的文本框

如果我只有一个文本框字段,这对我来说很容易做到。在
Textbox1\u Leave
事件中,我将检查
Textbox1.Text
是否为空,如果为空,则设置
Button1.Enabled=True

但是如果我有三个文本框该怎么办?有三个事件处理程序,每个文本框一个?还是有我不熟悉的方法


非常感谢

有一个通用子项,用于检查三个文本框,只要有一个文本框剩余,就会调用这三个文本框

实际上是这样

sub CheckBoxes
If (textbox1.text <> "") AND (textbox2.text <> "") AND (textbox3.text <> "") Then
    Button1.Enabled = True
else
    Button1.Enabled = False
End If
end sub
子复选框
如果是(textbox1.text“”)和(textbox2.text“”)以及(textbox3.text“”),则
按钮1.已启用=真
其他的
按钮1.已启用=错误
如果结束
端接头

我很抱歉这不是VBA语法,但psuedo代码应该为您指明正确的方向。

有一个通用子项,用于检查三个文本框,只要有一个文本框离开,就会调用它们

实际上是这样

sub CheckBoxes
If (textbox1.text <> "") AND (textbox2.text <> "") AND (textbox3.text <> "") Then
    Button1.Enabled = True
else
    Button1.Enabled = False
End If
end sub
子复选框
如果是(textbox1.text“”)和(textbox2.text“”)以及(textbox3.text“”),则
按钮1.已启用=真
其他的
按钮1.已启用=错误
如果结束
端接头

我很抱歉这不是VBA语法,但psuedo代码应该为您指出正确的方向。

创建一个方法,可以检查所有三个文本框的状态,如果所有三个文本框都有文本,则启用按钮1

为调用此方法的所有三个文本框创建事件处理程序


编辑:作为旁注,您可能希望使用“文本更改”事件而不是“离开”事件,因为如果第三个文本框在键入后的下一步操作是单击按钮,则第三个文本框上的焦点可能不会丢失。

创建一个方法,可以检查所有三个文本框的状态,如果三个文本框都有文本,则启用按钮1

为调用此方法的所有三个文本框创建事件处理程序


编辑:作为旁注,您可能希望使用“文本更改”事件而不是“离开”事件,因为如果他们在键入后的下一件事是单击按钮,则第三个文本框上的焦点可能不会丢失。

处理变化控件事件,然后根据控件的成功验证相应地调整按钮的启用/禁用行为


解释…

处理变化控件事件,然后根据控件的成功验证相应地调整按钮的启用/禁用行为

AddHandler Textbox1.TextChanged, AddressOf ValidateInputs
AddHandler Textbox2.TextChanged, AddressOf ValidateInputs
AddHandler Textbox3.TextChanged, AddressOf ValidateInputs

Private Sub ValidateInputs(ByVal Sender As Object, ByVal e as EventArgs)
    Button1.Enabled = Not (Textbox1.Text = String.Empty OrElse Textbox2.Text = String.Empty OrElse Textbox3.Text = String.Empty)
End Sub
解释

AddHandler Textbox1.TextChanged, AddressOf ValidateInputs
AddHandler Textbox2.TextChanged, AddressOf ValidateInputs
AddHandler Textbox3.TextChanged, AddressOf ValidateInputs

Private Sub ValidateInputs(ByVal Sender As Object, ByVal e as EventArgs)
    Button1.Enabled = Not (Textbox1.Text = String.Empty OrElse Textbox2.Text = String.Empty OrElse Textbox3.Text = String.Empty)
End Sub
而且,更好的是,如果这些控件都具有相同的父控件,并且是父控件中唯一的文本框(例如,所有控件都嵌套在一个groupbox中),则可以执行以下操作:

For Each t As TextBox In GroupBox1.Controls.OfType(Of Textbox)
   AddHandler t.TextChanged, AddressOf ValidateInputs
Next t

Private Sub ValidateInputs(ByVal Sender As Object, ByVal e as EventArgs)
    Button1.Enabled = Not GropuBox1.Controls.OfType(Of Textbox).Any(Function(t) t.Text = String.Empty)
End Sub
而且,更好的是,如果这些控件都具有相同的父控件,并且是父控件中唯一的文本框(例如,所有控件都嵌套在一个groupbox中),则可以执行以下操作:

For Each t As TextBox In GroupBox1.Controls.OfType(Of Textbox)
   AddHandler t.TextChanged, AddressOf ValidateInputs
Next t

Private Sub ValidateInputs(ByVal Sender As Object, ByVal e as EventArgs)
    Button1.Enabled = Not GropuBox1.Controls.OfType(Of Textbox).Any(Function(t) t.Text = String.Empty)
End Sub

别忘了将按钮的Enabled属性设置为False作为默认值(就像我做的那样…哦!)。谢谢你,你的回答帮了我很大的忙。别忘了将按钮的Enabled属性设置为False作为默认值(就像我做的那样…哦!)。谢谢,你的回答帮了我很大的忙。表格1有五个文本框和一个按钮。如果任何一个文本框为空,则Button1将被禁用Form1中有五个文本框和一个按钮。如果任何一个文本框为空,按钮1将被禁用