Erstellen eines hexadezimalen NumericUpDown-Steuerelements

8

Ich habe ein hexadezimales NumericUpDown-Steuerelement erstellt, indem ich das grundlegende NumericUpDown-Objekt untergeordnet und die folgende Methode hinzugefügt habe:

%Vor%

Das funktioniert ziemlich gut. Das Steuerelement zeigt nun Werte im folgenden Format an:

  

0x3F

was genau ich suchte.

Aber eine Sache stört mich: Jedes Mal, wenn die Text -Eigenschaft zugewiesen wird, wird eine System.FormatException ausgelöst. Das scheint die Funktionalität des Steuerelements nicht zu beeinträchtigen, aber ich denke, es ist hässlich.

Dies ist der Anfang des Callstacks:

  
    

MyAssembly.dll! HexNumericUpDown.UpdateEditText () Zeile 31 C #         System.Windows.Forms.dll! System.Windows.Forms.NumericUpDown.ValidateEditText () Unbekannt         System.Windows.Forms.dll! System.Windows.Forms.UpDownBase.Text.set (Zeichenfolgenwert) Unbekannt

  

Kann ich diese Ausnahme einfach ignorieren? Oder gibt es einen sauberen Weg, um das los zu werden?

    
Boris 28.05.2015, 06:05
quelle

3 Antworten

6

Sie müssen die ValidateEditText () -Methode überschreiben, damit Sie das (optionale) Präfix "0x" richtig behandeln können. Überschreiben Sie UpdateEditText () mit dem Präfix "0x". Fügen Sie Ihrem Projekt eine neue Klasse hinzu und fügen Sie den unten gezeigten Code ein. Kompilieren. Legen Sie das neue Steuerelement oben in der Toolbox auf Ihr Formular:

%Vor%

Fwiw, der skurrile Versuch / catch-em-all kommt direkt aus der .NET-Version. Ich behielt es, damit sich die Steuerung auf die gleiche Weise verhält. Tweak das ToString () - Argument, wie Sie es wollen.

    
Hans Passant 28.05.2015, 18:12
quelle
0

Ich denke, Sie müssen auch ParseEditText <überschreiben / a> ValidateEditText Methode, um zu akzeptieren Der Hex-Wert und setzen Sie die Value-Eigenschaft auf den richtigen Wert int.

    
Hans Kesting 28.05.2015 11:04
quelle
0

Es gibt einen Unterschied zwischen Casting und ConvertTo:

(int)obj - dies ist eine explizite Umwandlung von obj in den Typ int. Sie sagen dem Compiler, dass obj ein int ist. Wenn obj kein int-Typ ist, erhalten Sie eine Cast-Ausnahme. Aber es ist nicht WIRKLICH ein Int. und das X2-Format benötigt echte Ints.

Convert.ToInt32(obj) - Dies ist ein expliziter Aufruf der Convert-Klasse, um eine int-Repräsentation von obj zurückzugeben.

Aus diesem Grund müssen Sie Convert.ToInt32(Value)

verwenden

ABER In MSDN heißt es:

  

1) Diese API (numericUpDown.Text) unterstützt das .NET Framework   Infrastruktur und soll nicht direkt von Ihrem Code verwendet werden.

     

2) Der Text hat keine Auswirkungen auf die Darstellung von NumericUpDown   Steuerung; daher ist es im Designer und aus dem versteckt   IntelliSense.

    
israel altar 28.05.2015 06:34
quelle

Tags und Links