簡體   English   中英

VB.Net-不合作的十進制字符串

[英]VB.Net - Noncooperative decimal in string

我正在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

最終班

因此,經過長時間的調試,我發現您正在使用Label / Textbox的RightToLeft屬性設置為yes 確實沒有錯,但是它不能正確處理特殊字符,包括小數點,逗號等。 解決方法是顛倒我們的期望-顛倒字符串連接。

Result.Text = "." & Result.Text 

沒有完全確定我沒有看到完整的代碼,但我認為字符串連接可能有問題。
嘗試更改為:

Result.Text = Result.Text & "."

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM