Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vb.net 为什么可以';我是否使用我为按钮声明的变量对按钮进行编码,但我可以使用按钮而不必在Visual Basic中声明任何变量?_Vb.net_Winforms_Visual Studio - Fatal编程技术网

Vb.net 为什么可以';我是否使用我为按钮声明的变量对按钮进行编码,但我可以使用按钮而不必在Visual Basic中声明任何变量?

Vb.net 为什么可以';我是否使用我为按钮声明的变量对按钮进行编码,但我可以使用按钮而不必在Visual Basic中声明任何变量?,vb.net,winforms,visual-studio,Vb.net,Winforms,Visual Studio,我正在用VisualBasic做一个项目,这是一个Windows窗体应用程序。我创建了一个按钮(我称之为button0),在尝试为它处理click事件时,我为它声明了一个变量,如下所示: Public Class Project Dim txtAnswer As String Public Sub button0_Click(sender As Object, e As EventArgs) Handles button0.Click txtAnswer = an

我正在用VisualBasic做一个项目,这是一个Windows窗体应用程序。我创建了一个按钮(我称之为button0),在尝试为它处理click事件时,我为它声明了一个变量,如下所示:

Public Class Project
    Dim txtAnswer As String
    Public Sub button0_Click(sender As Object, e As EventArgs) Handles button0.Click
        txtAnswer = answerBox.Text
        If txtAnswer.Length = 0 Then
            txtAnswer = "0"
        End If
    End Sub
End Class
但是,每当我单击按钮时,文本框不会输出“0”。但是,当我尝试这个时,它确实:

Public Class Project
    Public Sub button0_Click(sender As Object, e As EventArgs) Handles button0.Click
        If answerBox.Text.Length = 0 Then
            answerBox.Text= "0"
        End If
    End Sub
End Class

每当我声明一个变量时,它都不起作用,但当我不声明时,它就起作用了。我做错了什么?

txtAnswer
answerBox。文本
并不像您想象的那样相互镜像

在第一个示例中,将变量设置为将值存储在文本框中。然后,如果字符串的长度为0,则将其设置为存储“0”。这样就不会将
answerBox.Text
设置为“0”

然而,在第二个示例中,您正在更新文本框以显示“0”,而不是未连接的变量

如果您想像第一个示例中那样使用变量,您需要这样做

Public Class Project
Dim txtAnswer As String

  Public Sub button0_Click(sender As Object, e As EventArgs) Handles button0.Click

      txtAnswer = answerBox.Text

      If txtAnswer.Length = 0 Then
          txtAnswer = "0"
      End If

      answerBox.Text = txtAnswer
  End Sub
End Class

由于您更新了一个变量,因此可以期望
TextBox.Text
属性自动更新。您需要告诉它使用变量中的值。

问题是您没有将值赋回到“应答器”中

变量将填充(读取:复制)到sub第一行的txtAnswer中。复制时,您需要在完成处理后将字符串放回文本框中。请参阅下面的代码和添加的行

Public Class Project
    Dim txtAnswer As String
    Public Sub button0_Click(sender As Object, e As EventArgs) Handles button0.Click
        txtAnswer = answerBox.Text
        If txtAnswer.Length = 0 Then
            txtAnswer = "0"
        End If
        ' The below line puts the value from the variable txtAnswer back into the textbox
        answerBox.Text = txtAnswer
    End Sub
End Class

虽然David和Bryant1003的答案是正确的,但最终的代码有点圆滑。为了实现更严格的编码:

Public Class Project
    Public Sub button0_Click(sender As Object, e As EventArgs) Handles button0.Click
        answerBox.Text = if(answerBox.Text.Length = 0, "0", answerBox.Text)
    End Sub
End Class
局部变量仅在前面的示例中用作临时保持器。
If
语句在以后的
.Net
版本中有效,而在
VBA
中无效。在这种情况下,也可以安全地使用
IIf


当然,如果您对AsfestBox .Text进行进一步操作,您可以考虑将其分配给临时变量。但这是否需要取决于你想做什么

txtAnswer
不是对
Text
属性的引用,它只是一个变量。如果更改
txtAnswer
则只更改该变量的值,而不更改
answerBox.Text
属性的值。字符串是复制的,而不是引用的。这意味着当您执行txtAnswer=answerBox.Text时,txtAnswer将是一个独立于.Text属性的副本。只需将其放回末尾:answerBox.Text=txtAnswer在第一个代码示例中,变量
txtAnswer
包含来自
answerBox.Text
的文本副本。您所有的更改都在带有副本的变量上,而不是在文本框上。您应该将变量
txtAnswer
的值写回
answerBox.Text