Laden...

Ausgabe in TextBox als Hex-Wert

Erstellt von rahul vor 14 Jahren Letzter Beitrag vor 8 Jahren 8.727 Views
R
rahul Themenstarter:in
9 Beiträge seit 2009
vor 14 Jahren
Ausgabe in TextBox als Hex-Wert

Hallo zusammen,

wie kann ich eine Zahl in einer TextBox als Hexadezimal-Wert ausgeben?


<TextBox Text="{Binding Path=meineZahl}" Name="TxtBox_MeineZahl" />

Ist "meineZahl" = 10 (Dezimal), so soll in der TextBox "0xA" stehen...

Habe was von "StringFormat" gelesen, aber ich finde einfach nichts passendes...

Danke
Rahul

U
1.578 Beiträge seit 2009
vor 14 Jahren

meinst du die formatierung direkt in der xaml oder geht auch in c# ?
in c# waere das einfach string.Format("{0:X}", value);

L
862 Beiträge seit 2006
vor 14 Jahren

das Binding hat eine Eigenschaft StringFormat da kannst du die Formatierung vornehmen:


<TextBox Text="{Binding Path=meineZahl,StringFormat={}{0:X}}" Name="TxtBox_MeineZahl" />

Wobei das {} am Anfang nur in XAML nötig wenn gleich am Anfang ein Parameter kommt um den Compiler davon abzuhalten das {0:X} so ähnlich wie {Binding} oder {StaticResource} zu parsen.

946 Beiträge seit 2008
vor 14 Jahren

Wobei das {} am Anfang nur in XAML nötig wenn gleich am Anfang ein Parameter kommt um den Compiler davon abzuhalten das {0:X} so ähnlich wie {Binding} oder {StaticResource} zu parsen.

Alternativ kannst du das auch "escapen":

<TextBox Text="{Binding meineZahl, StringFormat=\{0:X\}}"/>

mfg
SeeQuark

R
rahul Themenstarter:in
9 Beiträge seit 2009
vor 14 Jahren

Danke erstmal für die schnellen Antworten!
Also ich bräuchte das direk in XAML.


<TextBox Text="{Binding Path=meineZahl,StringFormat={}{0:X}}" Name="TxtBox_MeineZahl" /> 

geht bei mir nicht, er unterlegt er mir "}" hinter dem "X" blau, als ToolTipp kommt dann "}"


<TextBox Text="{Binding meineZahl, StringFormat=\{0:X\}}"/> 

habe ich dann auch ausprobiert, jedoch bekomm ich dann folgende Fehlermeldung:

Eine Ausnahme (erste Chance) des Typs "System.Windows.Markup.XamlParseException" ist in PresentationFramework.dll aufgetreten.

Zusätzliche Informationen: Cannot find DependencyProperty or PropertyInfo for property named 'StringFormat'. Property names are case sensitive. Error at object 'System.Windows.Data.Binding' in markup file...

Vergessen zu erwähnen:
"meineZahl" ist vom typ "int", also kein string...

946 Beiträge seit 2008
vor 14 Jahren

Das geht erst ab WPF mit .NET 3.5.
Falls es daran liegt, wäre ein Umstieg ratsam, da die Geschwindigkeit der WPF-Apps um bis zu 30% erhöht wird und andere Sachen dazu gekommen sind.

EDIT: Achso, bei meinem XAML-Code fehlt noch der "ElementName".

mfg
SeeQuark

R
rahul Themenstarter:in
9 Beiträge seit 2009
vor 14 Jahren

Das geht erst ab WPF mit .NET 3.5.

Mein Zielframework ist das .NET Framework 3.5, so steht es zumindest unter "Projekteigenschaften->Anwendung->Zielframework"
Also nutze ich doch die WPF 3.5, oder?

Sonst noch irgend eine Idee an was das liegen könnte?

60 Beiträge seit 2007
vor 14 Jahren

Hi,

du könntest mal testen, ob folgendes bei dir funktioniert:

<Label Content="{Binding Path=meineZahl}" ContentStringFormat="{}{0:f2}"></Label>

Dieses verwende ich in meinem Projekt.
Du müsstest für dich dann noch das f2 anpassen...

Viele Grüße
Jens

R
rahul Themenstarter:in
9 Beiträge seit 2009
vor 14 Jahren

Nicht zu fassen:
Ich habe das Projekt gerade lokal auf meinem Entwicklungsrechner laufen lassen, da scheint es zu funktionieren:


<TextBox Text="{Binding Path=meineZahl,StringFormat={}{0:X}}"  Name="MeinName"/>

ergibt bei "meineZahl" = 10(dezimal) --> "A"

Wenn ich das ganze per Remote-Debugging laufen lasse bekomme ich obige Fehlermeldung.

  • Wie kann ich es erreichen, dass ich nicht nur "A", sondern "0xA" bekomme?
    Sollte das nicht schon so sein? (wegen {0:X})

  • Wie finde ich herraus welche .net Version auf meiner Remote-Machine ist?

Edit:
Ich denke StringFormat, bzw. ContenStringFormat ist erst ab .net 3.5 SP1 verfügbar, das würde meine Situation erklären...

L
862 Beiträge seit 2006
vor 14 Jahren
  • Wie kann ich es erreichen, dass ich nicht nur "A", sondern "0xA" bekomme?
    Sollte das nicht schon so sein? (wegen {0:X})

{0:X} macht aus 10 -> A

Wenn du jetzt 0xA haben willst setz doch einfach 0x davor:


StringFormat=0x{0:X}

946 Beiträge seit 2008
vor 14 Jahren

Ich denke StringFormat, bzw. ContenStringFormat ist erst ab .net 3.5 SP1 verfügbar, das würde meine Situation erklären...

Stimmt, das wollte ich sagen 🤔.

Am Besten mal in die :rtfm: MSDN schauen: BindingBase.StringFormat-Eigenschaft

.NET Framework
Unterstützt in: 3.5 SP1, 3.0 SP1


  • Wie kann ich es erreichen, dass ich nicht nur "A", sondern "0xA" bekomme?
    Sollte das nicht schon so sein? (wegen {0:X})

Der Parameter entspricht exakt der string.Format-Methode.

Daher einfach: ":::{style="color: darkred;"}StringFormat){darkred}=0x\{0:X\}".
EDIT: Ein bisschen nach Lector, dafür richtig escaped 😄

mfg
SeeQuark

S
469 Beiträge seit 2007
vor 8 Jahren

Ich krame das Thema noch mal raus da es dazu passt.
Mit dem oben erwähnten StringFormat klappt das alles bei mir so lange gut, bis der Anwender den kompletten Text der Textbox löscht oder eine inkompatible Eingabe macht. Dann fliegt eine FormatException, die Eingabezeichenfolge habe das falsche Format. Die Exception fliegt (logischerweise), bevor der Setter des Bindings aufgerufen wurde, ein Breakpoint im Setter des gebundenen Properties wird nicht angesprungen (wenn die Exception fliegt, steht die Anwendung in einer while(continueLoop)-Schleife in der Microsoft-Application.cs).
Gibt es eine Möglichkeit, diese Exception zu behandlen, oder muss man an dieser Stelle auf die Formatierung im XAML verzichten und es im Code lösen (z.B. mit einem Konverter).

gruß & danke
sth_Weird

++++++++++++++++++++~+
Fluchen ist die einzige Sprache, die jeder Programmierer perfekt beherrscht


Linux is for free...if your time is worth nothing
++++++++++++++++++++~+