【问题标题】:Disable a button based on three textbox fields禁用基于三个文本框字段的按钮
【发布时间】:2010-12-13 15:43:32
【问题描述】:

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

我有一个带有三个文本框字段和一个按钮的 winform。必须先填写所有文本框字段,然后用户才能单击按钮继续。为此,只要至少有一个空文本框,我想禁用该按钮。

如果我只有一个文本框字段,我会很容易做到。在Textbox1_Leave 事件中,我会检查Textbox1.Text 是否为空,如果是,请设置Button1.Enabled = True
但是,如果我有三个文本框,我该怎么办?有三个事件处理程序,每个文本框一个?或者有什么我不熟悉的方法?

非常感谢。

【问题讨论】:

    标签: vb.net winforms textbox


    【解决方案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
    

    而且,更好的是,如果这些控件都具有相同的父级,并且是父级中唯一的文本框(例如,都嵌套在一个组框中),您可以这样做:

    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 作为默认值(就像我所做的那样...... d'oh!)。谢谢,你的回答对我帮助很大。
    【解决方案2】:

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

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

    编辑:作为旁注,您可能希望使用“Text Changed”事件而不是“Leave”事件,因为如果他们在键入后所做的下一件事是单击按钮。

    【讨论】:

      【解决方案3】:

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

      MSDN解释...

      【讨论】:

        【解决方案4】:

        有一个通用的 sub 来检查三个文本框,只要它们中的任何一个离开就会被调用。

        实际上是

        sub CheckBoxes
        If (textbox1.text <> "") AND (textbox2.text <> "") AND (textbox3.text <> "") Then
            Button1.Enabled = True
        else
            Button1.Enabled = False
        End If
        end sub
        

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

        【讨论】:

          【解决方案5】:
          Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
                  If TextBox1.Text = "" Or TextBox2.Text = "" Or TextBox3.Text = "" Or TextBox4.Text = "" Or TextBox5.Text = "" Then
                      Button1.Enabled = False
                  End If
              End Sub
              Private Sub TextBox5_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox5.TextChanged
                  If TextBox1.Text = "" Or TextBox2.Text = "" Or TextBox3.Text = "" Or TextBox4.Text = "" Or TextBox5.Text = "" Then
                      Button1.Enabled = False
                  Else
                      Button1.Enabled = True
                  End If
              End Sub
          

          【讨论】:

          • Form1 中有 5 个 TextBox 和 1 个 Button。如果任何一个 TextBoxes 为空,则 Button1 将被禁用
          猜你喜欢
          • 2021-04-24
          • 1970-01-01
          • 2010-12-04
          • 1970-01-01
          • 2013-04-27
          • 1970-01-01
          • 1970-01-01
          • 2021-07-15
          • 1970-01-01
          相关资源
          最近更新 更多