如果 VB 中的多个文本框中没有文本,如何禁用按钮?

How disable a button if there is no text in multiple textboxes in VB?

我有 9 个名为 Textbox1 的文本框一直到 Textbox9。我还有一个名为 Letter 的按钮,它从数组中选择一个随机字母。我有另一个名为 Start 的按钮。按下此按钮时会显示一个计时器,从 30 秒全部倒计时到零。我希望只有当所有 9 个文本框都包含文本时才会出现此按钮。我尝试了以下但似乎没有用:

将 if 语句中的所有 "And" 更改为 "Or"

Private Sub BtnStart_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BtnStart.Click
    If TxtBox1.Text = "" Or TxtBox2.Text = "" Or TxtBox3.Text = "" Or 
       TxtBox4.Text = "" Or TxtBox5.Text = "" Or TxtBox6.Text = "" Or
       TxtBox7.Text = "" Or TxtBox8.Text = "" Or TxtBox9.Text = "" Then
       TmrGame.Enabled = False
       MessageBox.Show("There Must Be A Total Of Nine Letters To Start The Game", "Not Enough Letters")
    Else
       TmrGame.Enabled = True
    End If
End Sub

通过使用 And,您检查所有文本框都必须为空,然后您将 timer.Enabled 设置为 false。对于 Or,您是说如果任何文本框为空,您会将 timer.Enabled 设置为 false。

Shar1er80 的回答是正确的。另一种方法是在任何文本框的文本更改后启用或禁用按钮。您可以使用事件处理程序轻松完成此操作:

Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    Dim Boxes As TextBox() = {TextBox1, TextBox2, TextBox3, TextBox4, TextBox5, TextBox6, TextBox7, TextBox8, TextBox9}
    For Each b In Boxes
        AddHandler b.TextChanged, Sub(s, ee)
                                      btnStart.Enabled = Not Boxes.Any(Function(box) box.Text = "")
                                      'The same, not using a negation would be:
                                      'btnStart.Enabled = Boxes.All(Function(box) box.Text <> "")
                                  End Sub
    Next
End Sub

首先,我创建了一个包含所有文本框的数组。它们和其他任何东西一样都是对象。然后我使用 AddHandler 关键字将每个框的 TextChanged 事件连接到一个子项。 在 Sub 中,我使用 LINQ 检查是否有任何文本框为空,如果是则禁用按钮(这类似于检查 or 连接的 If 语句中的每个框)。

尝试这样的事情:

Option Strict On
Option Explicit On
Option Infer Off
Public Class Form1
    Private Sub BtnStart_Click(sender As Object, e As EventArgs) Handles BtnStart.Click
        Dim execute As Boolean = True
        For i As Integer = 1 To 9
            If DirectCast(Me.Controls("TextBox" & i.ToString), TextBox).Text = "" Then execute = False
        Next
        If execute Then
            'Your code to execute here
        Else
            MessageBox.Show("Please provide input in all fields.", "Incomplete Submission", MessageBoxButtons.OK, MessageBoxIcon.Warning)
        End If
    End Sub
End Class