vb.net - 根据用户输入启用/禁用按钮

时间:2014-07-31 20:59:20

标签: vb.net button input

当我对我的节目进行最后润色时,我遇到了一些麻烦。 有几个用户输入和一个提交按钮,一旦填充了输入,我希望启用提交按钮,否则应该禁用该按钮。这就是我所拥有的:

 Private Sub ButtonControl(sender As System.Object, e As System.EventArgs) Handles Input1.Validated
    If Input1.Text = "" Then
        ButtonSubmit.Enabled = False
    ElseIf Input1.Text <> "" Then
        ButtonSubmit.Enabled = True
    End If
End Sub

事情就是禁用nomatter什么,然后当我的输入被提交时它不会启用

5 个答案:

答案 0 :(得分:2)

如果您有另一个可以获得焦点的控件,您的代码将会起作用。控制验证在失去焦点时发生。如果您只需要激活一个可关注项,则需要使用KeyPressKeyDownTextchanged事件来启用您的按钮,同时确保CausesValidation属性你的TextBox是真的。

我还会使该方法更通用,因此您可以使用sender对象访问引发事件的文本框,从多个文本框中调用它。此外,如果您有一个True / False条件,您只需要在第一个if语句中进行比较,然后您只使用else而不是elseif。

例如:

Private Sub ButtonControl(sender As System.Object, e As System.EventArgs) Handles Input1.Validated
    If DirectCast(sender, TextBox).Text = "" Then
        ButtonSubmit.Enabled = False
    Else
        ButtonSubmit.Enabled = True
    End If
End Sub

如果您使用的是4.0或更高版本的框架,也可以使用String.IsNullOrWhiteSpace方法检查是否只输入了空格。像这个TextChanged EventHandler。

Private Sub ButtonControl(sender As Object, e As EventArgs) Handles Input1.TextChanged
    If String.IsNullOrWhiteSpace(DirectCast(sender, TextBox).Text) Then
        ButtonSubmit.Enabled = False
    Else
        ButtonSubmit.Enabled = True
    End If
End Sub

答案 1 :(得分:1)

您将需要使用TextBox "TextChanged" event,并确保设置每个文本框AutoPostback="True"。您可以使用UpdatePanel使您希望验证的每个文本框上发生的回发对您的最终用户不那么讨厌。

所以,你的文本框(如果你有很多,请确保它们都有OnTextChanged =“ValidateForm”:

<asp:TextBox ID="Input1" runat="server" OnTextChanged="Validate_TextChanged" />

在你的textchanged(“ValidateForm”)事件(每个Textbox附加到)中,一个快速实现路由就可以

 ' Validation inside this event
Protected Sub Validate_TextChanged(sender As Object, e As EventArgs)

     if Input1.text <> "" AndAlso Input2.text <> "" AndAlso ' ...etc.

End Sub

如果你走了UpdatePanel的路线,你会发现this很有用。

答案 2 :(得分:1)

这是我要做的事情:

Private Sub TextBoxes_TextChanged( _
        ByVal sender As System.Object, ByVal e As System.EventArgs) _
        Handles _
            TextBox1.TextChanged, _
            TextBox2.TextChanged, _
            TextBox3.TextChanged

    Dim textBoxes = { TextBox1, TextBox2, TextBox3 }
    Button1.Enabled = textBoxes.All(Function (tb) tb.Text <> "")
End Sub

然后,您可以根据需要在textBoxes数组中添加任意数量的文本框。只需确保文本框为Handles列表。

答案 3 :(得分:0)

Private Sub TextBox1_TextChanged(sender As System.Object, e As System.EventArgs) Handles TextBox1.TextChanged

        If TextBox1.Text.Length > 0 Then
            Me.Button1.Enabled = True
        Else
            Me.Button1.Enabled = False
        End If


    End Sub

答案 4 :(得分:-1)

在Input1_TextChanged事件中执行该代码

这就是我所做的和工作:

Dim CheckInput1 As Boolean

Private Sub Input1_TextChanged(sender As Object, e As EventArgs) Handles Input1.TextChanged, Input1.Enter
    CheckInput1 = True
    If Input1.Text = "" Then
        CheckInput1 = False
    End If

    If CheckInput1 = False Then
        ButtonSubmit.Enabled = False
    ElseIf CheckInput1 = True Then
        ButtonSubmit.Enabled = True
    End If
End Sub

必须有一个更高效的代码,但我认为这可以解决您的问题。