只是在玩一些vb.net,我不明白为什么当我在文本框中输入Dog时,标签继续说不是dog?

Public Class Form1
    Dim dogAnswer As Boolean

    Public Sub New()
        ' This call is required by the designer.
        InitializeComponent()
        ' Add any initialization after the InitializeComponent() call.
    End Sub

    Public Function getText() As Boolean
        dogAnswer = False
        If TextBox1.Text = "Dog" Then
            Return dogAnswer = True
        End If
        Return dogAnswer
    End Function

    Public Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        If  dogAnswer = True Then
            Label1.Text = "dog"
        Else
            Label1.Text = "Not dog"
        End If
    End Sub
End Class

===============>>#1 票数:2 已采纳

存在三个问题:

1)你永远不会调用GetText

2)即使您确实调用GetText,它也将始终返回false。

3)您正在执行区分大小写的比较,因此,例如dog和DOG的值将返回false。

将您的代码更改为类似以下内容将得到您想要的东西:

Public Function getText() As Boolean
    If TextBox1.Text.Equals("Dog", StringComparison.InvariantCultureIgnoreCase) Then
        dogAnswer = True
    Else
        dogAnswer = False
    End If

    Return dogAnswer
End Function

Public Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    If getText() Then
        Label1.Text = "dog"
    Else
        Label1.Text = "Not dog"
    End If
End Sub

请注意,可以删除getText,并且不需要dogAnswer成员:

Public Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    If TextBox1.Text.Equals("Dog", StringComparison.InvariantCultureIgnoreCase) Then
        Label1.Text = "dog"
    Else
        Label1.Text = "Not dog"
    End If
End Sub

===============>>#2 票数:1

默认布尔值是false!

Dim dogAnswer As Boolean

===============>>#3 票数:0

就像首先要说的那样,我感谢您的参与,并且我知道当您尝试尝试一些新事物时,代码会变得混乱。

这里有很多错误...

在我看来,您有一个名为dogAnswer的模块(窗体)级别变量,该变量仅在调用函数getText时设置为True。 这是一个有副作用(返回结果并更改状态)的函数,有人说这是不好的做法。 其他人会提名我这么说。

永远不要在您的类(窗体)内部调用这些函数,除非调用它,否则dogAnswer的值将保持False(它是初始值-有人会说您应该显式设置初始值,而不要依赖默认值)

因此,即使TextBox1.Text确实包含“ Dog”,因为从不调用函数getText,dogAnswer始终为False,Label1.Text注定要保留为“ Not dog”。

但是即使您确实调用了该函数,该函数也永远不会起作用,因为您尝试使用以下行设置dogAnswer的值...

 Return dogAnswer = True

...这会将dogAnswer(初始化为False且从未更改)与True进行比较。 如果dogAnswer为True,则(dogAnswer = True)将返回True,但在执行该行之前,dogAnswer必须为False,因为代码中没有其他行设置它的值并将其初始化为False。 所以dogAnswer总是错误的

我认为您在这条线上需要的是:

dogAnswer = True

...但是您仍然需要在dogAnswer更改之前在某个地方调用getText

最后,我注意到您正在将TextBox1.Text的值与“ Dog”进行比较,但是将Label1.Text设置为“ dog”。 您可能需要不区分大小写的比较,否则,如果在TextBox1中输入“ dog”,则相等性测试将失败。

我还要说的是,一个名为getText的函数返回一个布尔值有点晦涩难懂

这是您的代码的固定版本

Public Class Form1
    Dim dogAnswer As Boolean

    Public Sub New()
        ' This call is required by the designer. 
        InitializeComponent()
        ' Add any initialization after the InitializeComponent() call. 
    End Sub

    Public Function getText() As Boolean
        dogAnswer = False
        If TextBox1.Text.Equals("Dog", StringComparison.CurrentCultureIgnoreCase) Then
            dogAnswer = True
        End If
        Return dogAnswer
    End Function

    Public Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim dummy As Boolean

        dummy = getText()
        If dogAnswer = True Then
            Label1.Text = "dog"
        Else
            Label1.Text = "Not dog"
        End If
    End Sub
End Class

...但是这是一个更好的方法...

Public Class Form1
    Dim dogAnswer As Boolean

    Public Sub New()
        ' This call is required by the designer. 
        InitializeComponent()
        ' Add any initialization after the InitializeComponent() call. 
    End Sub

    Public Sub CheckDogStatus()
        dogAnswer = TextBox1.Text.Equals("Dog", StringComparison.CurrentCultureIgnoreCase)
    End Sub

    Public Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        CheckDogStatus()
        If dogAnswer = True Then
            Label1.Text = "dog"
        Else
            Label1.Text = "Not dog"
        End If
    End Sub
End Class

祝好运!

  ask by user445714 translate from so

未解决问题?本站智能推荐: