VB.Net - 字符串中的非合作小数

时间:2014-04-11 16:21:43

标签: vb.net

我正在VB中编写一个计算器WinForm。我有一个标签用于显示输出“结果”。尝试添加“。”时出现问题。到我的标签字符串。示例:我将键入355.5,直到按下5后,我的字符串显示为.355按下最后一个5后,它会跳转到正确的位置。我已经用尽了我的调试技巧,现在我只是疯了。以前有人遇到过这个吗?

到目前为止,这是我的整个代码(忽略未完成的函数)

Public Class MyCalc

Private bDecFlag As Boolean
Private sMathOp As String

Private Sub ModeSel_SelectedIndexChanged(sender As System.Object, e As System.EventArgs) Handles ModeSel.SelectedIndexChanged

    If ModeSel.SelectedIndex = 3 Then
        Me.Width = 360
    ElseIf ModeSel.SelectedIndex > 2 Then
        Me.Width = 590
    Else
        Me.Width = 250
    End If

    If ModeSel.SelectedIndex = 0 Then
        For iCount As Integer = 0 To 9
            Me.Controls("Digit" & iCount).Enabled = True
        Next
    End If

    If ModeSel.SelectedIndex = 1 Then
        For iCount As Integer = 2 To 9
            Me.Controls("Digit" & iCount).Enabled = False
        Next
    End If

    If ModeSel.SelectedIndex = 2 Then
        For iCount As Integer = 0 To 7
            Me.Controls("Digit" & iCount).Enabled = True
        Next
        Digit8.Enabled = False
        Digit9.Enabled = False
    End If

    If ModeSel.SelectedIndex = 3 Then
        For iCount As Integer = 0 To 9
            Me.Controls("Digit" & iCount).Enabled = True
        Next
        For iCount As Integer = Asc("A") To Asc("F")
            Me.Controls("Alpha" & Chr(iCount)).Enabled = True
        Next
        For iCount As Integer = Asc("G") To Asc("Z")
            Me.Controls("Alpha" & Chr(iCount)).Enabled = False
        Next
    End If

    If ModeSel.SelectedIndex = 4 Then
        For iCount As Integer = 0 To 9
            Me.Controls("Digit" & iCount).Enabled = True
        Next

        For iCount As Integer = Asc("A") To Asc("Z")
            Me.Controls("Alpha" & Chr(iCount)).Enabled = True
        Next
        AlphaA.Enabled = False
        AlphaE.Enabled = False
        AlphaI.Enabled = False
        AlphaO.Enabled = False
        AlphaU.Enabled = False
    End If

End Sub

Private Sub Digit0_Click(sender As System.Object, e As System.EventArgs) Handles Digit0.Click
    UpdateResult(0)
End Sub

Private Sub Digit1_Click(sender As System.Object, e As System.EventArgs) Handles Digit1.Click
    UpdateResult(1)
End Sub

Private Sub Digit2_Click(sender As System.Object, e As System.EventArgs) Handles Digit2.Click
    UpdateResult(2)
End Sub

Private Sub Digit3_Click(sender As System.Object, e As System.EventArgs) Handles Digit3.Click
    UpdateResult(3)
End Sub

Private Sub Digit4_Click(sender As System.Object, e As System.EventArgs) Handles Digit4.Click
    UpdateResult(4)
End Sub

Private Sub Digit5_Click(sender As System.Object, e As System.EventArgs) Handles Digit5.Click
    UpdateResult(5)
End Sub

Private Sub Digit6_Click(sender As System.Object, e As System.EventArgs) Handles Digit6.Click
    UpdateResult(6)
End Sub

Private Sub Digit7_Click(sender As System.Object, e As System.EventArgs) Handles Digit7.Click
    UpdateResult(7)
End Sub

Private Sub Digit8_Click(sender As System.Object, e As System.EventArgs) Handles Digit8.Click
    UpdateResult(8)
End Sub

Private Sub Digit9_Click(sender As System.Object, e As System.EventArgs) Handles Digit9.Click
    UpdateResult(9)
End Sub

Private Sub DecBut_Click(sender As System.Object, e As System.EventArgs) Handles DecBut.Click
    If bDecFlag = False Then
        If Result.Text = "0" Then
            Result.Text = "0."
            bDecFlag = True
        Else
            Result.Text = Result.Text + "."
            bDecFlag = True
        End If
    End If
End Sub

Private Sub ClrBut_Click(sender As System.Object, e As System.EventArgs) Handles ClrBut.Click
    Result.Text = 0
    bDecFlag = False
End Sub

Private Sub DelBut_Click(sender As System.Object, e As System.EventArgs) Handles DelBut.Click
    If Result.Text = "0" Then
    ElseIf Result.Text.Substring(Result.Text.Length - 1) = "." Then
        Result.Text = Result.Text.Substring(0, Result.Text.Length - 1)
        bDecFlag = False
    Else
        Result.Text = Result.Text.Substring(0, Result.Text.Length - 1)
        If Result.Text = "" Then
            Result.Text = "0"
        End If
    End If
End Sub

Private Sub MyCalc_KeyDown(sender As Object, e As System.Windows.Forms.KeyEventArgs) Handles Me.KeyDown
    Select Case e.KeyCode
        Case Keys.NumPad0
            Digit0_Click(Digit0, New EventArgs)
        Case Keys.NumPad1
            Digit1_Click(Digit1, New EventArgs)
        Case Keys.NumPad2
            Digit2_Click(Digit2, New EventArgs)
        Case Keys.NumPad3
            Digit3_Click(Digit3, New EventArgs)
        Case Keys.NumPad4
            Digit4_Click(Digit4, New EventArgs)
        Case Keys.NumPad5
            Digit5_Click(Digit5, New EventArgs)
        Case Keys.NumPad6
            Digit6_Click(Digit6, New EventArgs)
        Case Keys.NumPad7
            Digit7_Click(Digit7, New EventArgs)
        Case Keys.NumPad8
            Digit8_Click(Digit8, New EventArgs)
        Case Keys.NumPad9
            Digit9_Click(Digit9, New EventArgs)
        Case Keys.Back
            DelBut_Click(DelBut, New EventArgs)
        Case Keys.Decimal
            DecBut_Click(DecBut, New EventArgs)

    End Select
End Sub

Private Sub MyCalc_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
    bDecFlag = False
End Sub

Public Sub UpdateResult(ByVal sNum As String)
    If Result.Text = "0" Then
        Result.Text = sNum
    Else
        Result.Text &= sNum
    End If
End Sub

结束班

2 个答案:

答案 0 :(得分:1)

经过长时间的调试后,我发现您使用标签/文本框 RightToLeft 属性设置为。它确实没有什么问题,但它无法正确处理包括小数点,逗号等在内的特殊字符。解决方法是扭转我们的预期 - 扭转字符串连接。

Result.Text = "." & Result.Text 

答案 1 :(得分:0)

没有看到整个代码我不完全确定,但我认为字符串连接可能有问题。
尝试改为:

Result.Text = Result.Text & "."