只是在玩一些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

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

1回复

Linq查询从另一个类返回值

只是有关LINQ的一个简单问题,我想使用返回的数据集中的值来查找值并将其返回。 我苦苦挣扎的那一行是.ViewingNotes = New Viewing(pt.ProspectId).GetViewings()。Columns(7).ToString()。 这可能吗? 提前致谢。
1回复

如何获得另一个函数的返回值?

如何在LINQ中给出另一个函数的返回值。 我有一个IEnumerable objects(Say ObjColl) 。 从该对象集合中,我必须根据另一个function(say GetObjPropertyValue)的返回值function(say GetObjPropertyValu
1回复

方法未返回值[VB.NET]

所以我用构造函数和方法建立了一个基本类,但是我不断得到_TotalCostInteger变量= 0 ,这让我很_TotalCostInteger 。 Public Class FlooringClass Protected _LengthInteger As Integer Protected
1回复

InvokeRequired不从方法返回值

我使用InvokeRequired来保证线程安全,但是当涉及到我的方法时,如果我将value传递为true,则始终显示false。 为什么以及如何解决?
2回复

为什么没有OnXXX事件提升程序方法返回值?

假设您有一个事件引发器方法(OnXXX),该方法使用CancelEventArgs类引发事件,让OnXXX方法返回e.Cancel的值有什么问题吗? 例如: 在我看来,这是一个更清洁的解决方案:
2回复

Vb.net方法不返回值

我的GetWoodTypes方法中的isPicked为False ,我的代码返回-1,我的if语句被完全忽略,并且如果有人可以帮助,我在代码中找不到问题,那将是一个好问题 Public Class Class1 Shared Sub Main() Dim woodTy
1回复

如何通过调用方法并传递返回值来正确设置Windows消息的返回值?

我正在尝试自定义处理wndproc消息的方式。 在一个类中,我有一个简单的wndproc重写的子类,当处理了一个KNOWN消息时,我使用该消息信息引发一个事件,这就是我处理事件的方式: 好吧,我现在想尝试的是创建一个可以设置引发消息的返回值的方法(注意上面的代码中的WndMessa
1回复

为什么不能有两个参数相同但返回值不同的方法?

.net允许... 它通过查看参数的类型来找出要调用的对象,例如... 好吧,那你为什么不能这样做... 编译器可以使用相同数量的信息... 我要解决的特定问题是在Dictionary(Of Integer, MyClass)返回Values , 以便COM In
2回复

如何在VB应用程序中使用VBScript函数的返回值?

我正在开发ASP.NET应用程序,我需要使用一个旧的VBScript文件,要在VB函数中将其转换为纯VB真的很难。 这个VBScript应该返回一个我想在调用它的VB函数中使用的数组。 如何在VB应用程序中调用VBScript函数并使用它返回的值? 我已经通过许多论坛和常见问题
2回复

WebMethod返回值并在vb.net中调用其他方法

我有一个Web服务,其中一个WebMethod的返回值为boolean。 它接受XML文件作为字符串并处理数据。 如何首先将状态返回为true,然后再调用ProcessData方法。 由于处理数据需要时间,因此我需要先返回true,然后再处理数据。 请帮忙。