在输入框添加一个取消按钮 VB

Add a cancel button to input box VB

我做了一个简单的计算器,我想知道你输入的是字符串而不是双精度数,以及你是否按下关闭键。该程序是一个简单的计算器,其中的菜单是一个带有加法、减法、乘法和除法按钮的框。如果你输入一个字符串,我会喜欢它弹出一个消息框,告诉你输入一个数字,当你输入一个空消息或单击取消时,它会带你回到程序的开始。这是代码

Public Class CalcForm
    Property num1 As Double = Nothing
    Property num2 As Double = Nothing
    Private Sub CalcForm_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    End Sub
    Private Sub Addition_Click(sender As Object, e As EventArgs) Handles Addition.Click
        Getnum()
        Dim Answer As Double = num1 + num2
        MessageBox.Show("The answer is " & Answer, "Answer")
    End Sub
    Private Sub Subtraction_Click(sender As Object, e As EventArgs) Handles Subtraction.Click
        Getnum()
        Dim Answer As Double = num1 - num2
        MessageBox.Show("The answer is " & Answer, "Answer")
    End Sub
    Private Sub Multiplication_Click(sender As Object, e As EventArgs) Handles Multiplication.Click
        Getnum()
        Dim Answer As Double = num1 * num2
        MessageBox.Show("The answer is " & Answer, "Answer")
    End Sub
    Private Sub Division_Click(sender As Object, e As EventArgs) Handles Division.Click
        Getnum()
        Dim Answer As Double = num1 / num2
        MessageBox.Show("The answer is " & Answer, "Answer")
    End Sub
    Private Sub Getnum()
        num1 = InputBox("Enter your first number", "Number 1")
        num2 = InputBox("Enter your second number", "Number 2")
    End Sub
End Class

我也不关心空的 ok 和 cancel 之间的区别。但是因为我使用双打,我必须把它变成一个字符串然后转换成一个双打吗?如果我这样做,我如何检测字符串是否包含字母并要求用户重新输入他们的号码?

你真的需要你的消息框吗?

如果您遵循 Hans Passant 的建议并开始使用 TextBox,您可以简单地绑定变量属性并对其进行解析和格式化。

看看下面的示例,它的代码行数较多,但让您有机会查看绑定解析和格式化。

这是一个带有四个按钮和三个文本框的简单表单。用户不能 "get out" 的 TextBox 值不是数字。如果您选择此解决方案,我建议将结果的 TextBox 属性 设置为 ReadOnly :)

Imports System.Math
Imports System.ComponentModel

Public Class Form1
Implements INotifyPropertyChanged

Public Event PropertyChanged As PropertyChangedEventHandler Implements INotifyPropertyChanged.PropertyChanged
Private Sub NotifyPropertyChanged(ByVal info As String)
    RaiseEvent PropertyChanged(Me, New PropertyChangedEventArgs(info))
End Sub

Private _num1 As Double
Property num1 As Double
    Get
        Return _num1
    End Get
    Set(value As Double)
        If (value <> _num1) Then
            _num1 = value
            NotifyPropertyChanged("num1")
        End If
    End Set
End Property
Private _num2 As Double
Property num2 As Double
    Get
        Return _num2
    End Get
    Set(value As Double)
        If (value <> _num2) Then
            _num2 = value
            NotifyPropertyChanged("num2")
        End If
    End Set
End Property
Private _Answer As Double
Property Answer As Double
    Get
        Return _Answer
    End Get
    Set(value As Double)
        If (value <> _Answer) Then
            _Answer = value
            NotifyPropertyChanged("Answer")
        End If
    End Set
End Property

Private Sub CalcForm_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    ' TextBox for result
    TextBox3.ReadOnly = True
    Set_bindings()
End Sub
Private Sub Addition_Click(sender As Object, e As EventArgs) Handles Addition.Click
    Answer = num1 + num2
End Sub
Private Sub Substraction_Click(sender As Object, e As EventArgs) Handles Substraction.Click
    Answer = num1 - num2
End Sub
Private Sub Multiplication_Click(sender As Object, e As EventArgs) Handles Multiplication.Click
    Answer = num1 * num2
End Sub
Private Sub Division_Click(sender As Object, e As EventArgs) Handles Division.Click
   Answer = num1 / num2
End Sub

Private Sub Set_bindings()
    Dim binH As Binding
    TextBox1.DataBindings.Clear()
    binH = New Binding("Text", Me, "num1", True, DataSourceUpdateMode.OnPropertyChanged)
    AddHandler binH.Parse, AddressOf NumParser
    AddHandler binH.Format, AddressOf NumFormatter
    TextBox1.DataBindings.Add(binH)
    TextBox2.DataBindings.Clear()
    binH = New Binding("Text", Me, "num2", True, DataSourceUpdateMode.OnPropertyChanged)
    AddHandler binH.Parse, AddressOf NumParser
    AddHandler binH.Format, AddressOf NumFormatter
    TextBox2.DataBindings.Add(binH)
    TextBox3.DataBindings.Clear()
    binH = New Binding("Text", Me, "Answer", True, DataSourceUpdateMode.Never)
    AddHandler binH.Parse, AddressOf NumParser
    AddHandler binH.Format, AddressOf NumFormatter
    TextBox3.DataBindings.Add(binH)
End Sub

Private Sub NumParser(ByVal sender As Object, ByVal e As ConvertEventArgs)
   If IsNumeric(e.Value) Then
       e.Value = e.Value
   End If
End Sub

Private Sub NumFormatter(ByVal sender As Object, ByVal e As ConvertEventArgs)
    e.Value = FormatNum(e.Value)
End Sub

Private Function FormatNum(ByVal x As Double) As String
    Dim sFormat As String
    sFormat = ""
    Select Case Abs(x)
        Case 1 To 1000
            sFormat = "##0.000"
        Case Is > 10000
            sFormat = "0.000E+00"
        Case Is = 0
            sFormat = "#0.0"
        Case Is < 0.001
            sFormat = "0.000E-00"
        Case Is < 1
            sFormat = "#0.0000"
    End Select
    FormatNum = Format(x, sFormat)
End Function

End Class