【问题标题】:VB.NET Calculator; clearing textbox after an operationVB.NET 计算器;操作后清除文本框
【发布时间】:2014-04-13 15:47:11
【问题描述】:

我正在开发一个简单的计算器,它正在工作,但是一旦操作完成,我就会遇到清除文本框的问题,我想开始另一个。 假设我进行了求和,结果是 6,当我单击一个数字开始另一个操作时,它不会清除文本框,我想知道我该怎么做?

由于我是初学者,请保持您的答案简单。

这是我目前拥有的代码:

Public Class Form1
Dim FirstNumber As Long
Dim Operation As String


'BUTTONS
'Numbers

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    Viewer.Text = Viewer.Text + "1"
End Sub

Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
    Viewer.Text = Viewer.Text + "2"
End Sub

Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click
    Viewer.Text = Viewer.Text + "3"
End Sub

Private Sub Button4_Click(sender As Object, e As EventArgs) Handles Button4.Click
    Viewer.Text = Viewer.Text + "4"
End Sub

Private Sub Button5_Click(sender As Object, e As EventArgs) Handles Button5.Click
    Viewer.Text = Viewer.Text + "5"
End Sub

Private Sub Button6_Click(sender As Object, e As EventArgs) Handles Button6.Click
    Viewer.Text = Viewer.Text + "6"
End Sub

Private Sub Button7_Click(sender As Object, e As EventArgs) Handles Button7.Click
    Viewer.Text = Viewer.Text + "7"
End Sub

Private Sub Button8_Click(sender As Object, e As EventArgs) Handles Button8.Click
    Viewer.Text = Viewer.Text + "8"
End Sub

Private Sub Button9_Click(sender As Object, e As EventArgs) Handles Button9.Click
    Viewer.Text = Viewer.Text + "9"
End Sub

Private Sub Button15_Click(sender As Object, e As EventArgs) Handles Zero.Click
    Viewer.Text = Viewer.Text + "0"
End Sub

'Buttons "," "del" "clear"

Private Sub Button14_Click(sender As Object, e As EventArgs) Handles Dot.Click
    Viewer.Text = Viewer.Text + ","
End Sub

Private Sub Button17_Click(sender As Object, e As EventArgs) Handles Del.Click
    Viewer.Text = Viewer.Text.Remove(Viewer.Text.Length - 1, 1)
End Sub

Private Sub Clear_Click(sender As Object, e As EventArgs) Handles Clear.Click
    Viewer.Text = ""
End Sub

Private Sub Sum_Click(sender As Object, e As EventArgs) Handles Sum.Click
    FirstNumber = Val(Viewer.Text)
    Operation = "SUM"
    Viewer.Text = ""
End Sub

Private Sub Minus_Click(sender As Object, e As EventArgs) Handles Minus.Click
    FirstNumber = Val(Viewer.Text)
    Operation = "MINUS"
    Viewer.Text = ""
End Sub

Private Sub Multi_Click(sender As Object, e As EventArgs) Handles Multi.Click
    FirstNumber = Val(Viewer.Text)
    Operation = "MULTI"
    Viewer.Text = ""
End Sub

Private Sub Div_Click(sender As Object, e As EventArgs) Handles Div.Click
    FirstNumber = Val(Viewer.Text)
    Operation = "DIV"
    Viewer.Text = ""
End Sub

Private Sub Result_Click(sender As Object, e As EventArgs) Handles Result.Click
    Dim SecondNumber As Long
    Dim Result As Double

    SecondNumber = Val(Viewer.Text)

    'Fx
    If Operation = "SUM" Then
        Result = FirstNumber + SecondNumber
    End If

    If Operation = "MINUS" Then
        Result = FirstNumber - SecondNumber
    End If

    If Operation = "MULTI" Then
        Result = FirstNumber * SecondNumber
    End If

    If Operation = "DIV" Then
        Result = FirstNumber / SecondNumber
    End If

    Viewer.Text = Result

End Sub

End Class

【问题讨论】:

  • Ty 伙计们,我会尽快检查他们的!非常感谢您的帮助:)

标签: vb.net calculator


【解决方案1】:

尝试使用 boolean 类型的 simpel 全局变量,这表示您想在添加数字之前清除文本,如下所示:

Public Class Form1
  Dim FirstNumber As Long
  Dim Operation As String
  Dim ClearField as Boolean = True  'At program start, you do want to start over at first
  ...

那么你应该使用一个新的 sub 向查看器添加文本,使代码更清晰,避免重复:

...
Private Sub AddNumber(NewValue as String)
  If ClearField = True Then Viewer.Text = ""
  Viewer.Text &= NewValue
  ClearField = False
End Sub
...

字段清空一次后,将ClearField变量设置为false,避免再次清空字段。 在Button.Click 事件处理程序中,您只需使用此子程序而不是手动添加文本:

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    AddNumber("1")
End Sub
Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
    AddNumber("2")
End Sub

等等。 计算结果后,将 ClearField 变量设置为 true,以便下次添加数字时程序重新开始:

...
Viewer.Text = Result
ClearField = True
...

【讨论】:

    【解决方案2】:

    使用全局变量来识别输入是数字和操作的序列还是结果按钮之后的此类序列的开始。

    Public Class Form1
    Dim FirstNumber As Long
    Dim Operation As String
    
    Dim ResultPressed As Boolean
    
    'BUTTONS
    'Numbers
    
    Private Sub Typing()
      IF ResultPressed Then ' Result button was already pressed. This number or operation typing is first button press after result button
          Viewer.Text = "";      ' so let's clear textbox
          ResultPressed = False; 
      End If
      ' If ResultPressed is false, nothing to do. Continue typing numbers ..
    End
    
    Private Sub EndTyping()
      ResultPressed = True;
    End  
    
    
    
    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        ' Typing number or some operation fce Typing() will decides if clear textbox..
        Typing()
        Viewer.Text = Viewer.Text + "1"
    End Sub
    
    Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
        ' Typing number or some operation fce Typing() will decides if clear textbox..
        Typing()
        Viewer.Text = Viewer.Text + "2"
    End Sub
    
    Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click
        ' Typing number or some operation fce Typing() will decides if clear textbox..
        Typing()
        Viewer.Text = Viewer.Text + "3"
    End Sub
    
    
    Private Sub Result_Click(sender As Object, e As EventArgs) Handles Result.Click        
        Dim SecondNumber As Long
        Dim Result As Double
    
        ' Numbers and operation typing finished. 
        EndTyping()
    
        SecondNumber = Val(Viewer.Text)
    

    【讨论】:

      【解决方案3】:

      在代码的开头取一个标志变量。在结果单击事件上,设置标志。下次单击数字按钮时,请检查标志。如果已设置:

      1. 清除文本框。
      2. 将标志设置回 0。

      在您的结果点击事件中,在Viewer.Text = Result 之后添加这一行

      flag=1
      

      这是一个按钮的示例:

      Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        If flag=1 then
           Viewer.Text = ""
           Viewer.Text = Viewer.Text + "1"
           flag = 0
        Else
           Viewer.Text = Viewer.Text + "1"
        End If
      End Sub
      

      对每个按钮都这样做。

      【讨论】:

      • 不需要声明“flag”吗?我试过但是,即使没有抛出任何错误,它也不起作用......
      • 当然需要声明“flag”。在“Dim Operation As String”之后全局声明为“Dim Flag As Integer”
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-04-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多