2016-08-04 42 views
1

Ich habe dieses Problem, das sehr seltsam aussieht, ich entwickle ein Programm, das nur Fehlermeldung auf Computern mit Windows 8 sendet, aber Windows 7 und Windows 10 funktioniert einwandfrei.VB.NET Fehler DatagridViewCellValueChanged Windows 8

Ich werde ein wenig über den Fehler diskutieren, in ein paar Zeilen Code, speziell in dem Fall DataGridViewCellValueChanged Ich konvertiere eine Zahl in Münzformat, aber das Merkwürdige ist, dass das Ereignis (meiner Meinung nach) läuft, bevor sie ändern der Wert der Zelle und ich denke, das cellvaluechanged Ereignis sollte ausgeführt werden, wenn der Benutzer etwas in die Zelle und dann aus dieser Zelle, etwas "ähnlich" CellEndEdit aber nur wenn der Wert der Zelle ändern, aber in diesem speziellen Fall Der Benutzer drückt ein beliebiges Zeichen in einer Zelle in einer angegebenen Spalte, ohne den Fokus der Zelle zu verlieren, und sendet einen Fehler.

Auf meinem Computer mit Windows 7 Programm funktioniert gut und auf einem Windows 10 zu

Dies ist der Code:

Private Sub GridCatalogo_CellValueChanged(sender As Object, e As System.Windows.Forms.DataGridViewCellEventArgs) Handles GridCatalogo.CellValueChanged 
    If GridCatalogo.Columns(e.ColumnIndex).ToolTipText = "$" Then 
     If IsNothing(GridCatalogo.Item(e.ColumnIndex, e.RowIndex).Value) = False Then 
      Try 
       GridCatalogo.Item(e.ColumnIndex, e.RowIndex).Value = Format(CType(GridCatalogo.Item(e.ColumnIndex, e.RowIndex).Value, Decimal), "$#,##0.00") 
      Catch ex As Exception 
       'MsgBox(ex.Message) 
      End Try 
     End If 
    End If 
End Sub 

Ich weiß, dass das Bild einer Fehlermeldung ist nicht erforderlich, aber wollte um die Daten anzuzeigen, die der Benutzer in DataGridView eingegeben hat.

enter image description here

Die Meldung sagt:

Die Umwandlung von Zeichenfolge "$ 8.00" auf 'Dezimal' nicht unterstützt wird.

Wie Sie im Code sehen können, hatte ich den Fehler behandeln die Meldung nicht mehr angezeigt, so dass nur vorübergehend die Fehler beheben, aber nicht verstehen, warum das nur in Windows 8

Antwort

0

Dieser Code geschieht könnte hilft Ihnen beim Debuggen. Sie möchten, dass s "$ 8.00" ist, bis Sie den Auftrag erhalten, und Sie sollten kein Problem haben. Wenn die Fehlermeldung einen Wert anzeigt, den Sie nicht erwartet haben, aber zu einem bestimmten Zeitpunkt nach der Zuweisung im Grid angezeigt wird, haben Sie ein Zeitproblem.

Private Sub GridCatalogo_CellValueChanged(sender As Object, e As System.Windows.Forms.DataGridViewCellEventArgs) Handles GridCatalogo.CellValueChanged 
    If GridCatalogo.Columns(e.ColumnIndex).ToolTipText = "$" Then 
     If IsNothing(GridCatalogo.Item(e.ColumnIndex, e.RowIndex).Value) = False Then 
      Dim s As String = "not set" 
      Dim d As Decimal = Decimal.MinValue 
      Try 
       s = GridCatalogo.Item(e.ColumnIndex, e.RowIndex).Value 
       d = CType(s, Decimal) 
       GridCatalogo.Item(e.ColumnIndex, e.RowIndex).Value = Format(d, "$#,##0.00") 
      Catch ex As Exception 
       MsgBox(String.Format("s={0}, d={1}, ex.message={2}", s, d, ex.Message)) 
      End Try 
     End If 
    End If 
End Sub 

Ihre Formatmethode funktioniert wahrscheinlich, aber warum nicht ein Währungsformat verwenden? Wenn CurrentCulture nicht funktioniert, können Sie es angeben.

Sub Main() 
    Dim currencyString = "$8.00" 

    Dim currencyOPFormat = Format(CType(currencyString, Decimal), "$#,##0.00") 

    Dim currencyDecimal = Decimal.Parse(currencyString, Globalization.NumberStyles.Currency) 
    Dim currencyNewFormat = currencyDecimal.ToString("C", CultureInfo.CurrentCulture) 

    Console.WriteLine("Original: " & currencyOPFormat) 

    Console.WriteLine("Parsed Decimal: " & currencyDecimal) 
    Console.WriteLine("Formatted Decimal: " & currencyNewFormat) 

    Console.ReadLine() 
End Sub 

Siehe über Währungsformat: https://msdn.microsoft.com/en-us/library/dwhawy9k(v=vs.110).aspx#CFormatString

+0

Sie danken, auch den Code Ich versuche nicht, weil zuerst will ich es besser verstehen, aber was Sie erwähnt habe ich gab mir die Idee, das Problem zu lösen, nur Ich musste das Format in den Einstellungen regonal diese Computer ändern. – Rchrd