2 x 2 Textboxen aktuell halten.
-
Ja,aber wenn ich zwei Felder vollgeschrieben habe, verlasse ich das letztausgefüllte ja nicht.
-
Naja, das wäre halt die Bedingung. Die Rechnung findet erst statt, wenn die Felder den Fokus verlieren.
Ich nehme mal an, dass du WinForms verwendest. Da gäbe es nämlich ein ganz nützliches Property:
http://msdn.microsoft.com/en-us/library/system.windows.forms.textboxbase.modified.aspxDas praktische an dem ist, dass es nur auf
true
ist, wenn auch der User etwas verändert hat. Wenn du über die PropertyText
eine Änderung duchführst, wirdModified
auffalse
gesetzt.Grüssli
-
Dann bastel dir doch eine zentrale Klasse die sich an die OnTextChanged Events / hängt ( oder KeyPress) und auswertet.
Die Klasse muss dann halt nur managen dass einige Events ignoriert/deaktiviert werden und einige eben nicht.
Real oder Imaginär Textbox geändert -->
- Rechnen
- deine Eventmethode von Betrag und Phase entfernen
- Werte Setzen
- Events wieder zuschaltenWenn du Betrag und Phase änerst dann das ganze Spiel anders herum!
gruß
Sascha
-
Oder einfach ein boolean der sich das merkt, so ala "self change"
-> eingabe erfolgt
-> if (!SelfChange)
-> SelfChange = true;
-> Rechnen
-> Zuweisen
-> SelfChange = false;Du musst ja nur unterscheiden ob der Text vom User oder von dir geändert wurde.
-
Hallo CSL,
hättest ihm ja auch gleich diesen FAQ-Eintrag (aus dem MyCSharp-Forum) geben können: http://www.mycsharp.de/wbb2/thread.php?threadid=73593 -)
-
@CSL & Th69,
Lest doch bitte mal durch, was das PropertyModified
genau tut.
Wieso selber was hinzuschreiben, wenn es bereits fertig von der Bibliothek angeboten wird?Grüssli
-
Hab ich nicht gesehen da es Forms ist, und von Forms hab ich kein Plan
franky hat ja noch nicht gesagt hat was er nun tatsächlich verwendet.
-
CSL schrieb:
franky hat ja noch nicht gesagt hat was er nun tatsächlich verwendet.
Naja, mit WPF würde ich aber eher ein TwoWay Binding verwenden mit einem eigenen Converter dazwischen, welcher die Rechnung ausführt, oder irgendetwas in der Richtung
Grüssli
-
Das ändert das Problem nicht.
Sobald eine Eingabe in Box 1 gemacht wird soll ein Ergebnis in Box 2 gesetzt werden, und sobald in Box 2 eine Eingabe gemacht wird soll ein Ergebnis in Box 1 gemacht werden.
Ob das Ergebnis nun von einem Converter eingetragen wird oder aus dem Code heraus ändert nichts an der Problematik wann gerechnet werden soll -> Endlosschleife.
Entsprechend ist das Entfernen des Handlers oder ein Boolean die einzige gangbare Lösung.
-
Du vergisst, dass Binding automatisch dafür sorgt, dass es keine Rückkopplung gibt. Du kannst ja jederzeit zwei TextBox Elemente zusammenhängen, so dass die Änderungen in der einen TextBox sofort auf die zweite übertragen werden und umgekehrt.
<TextBox Name="TxtFirst" /> <TextBox Text="{Binding Text, ElementName=TxtFirst, UpdateSourceTrigger=PropertyChanged}" />
Beide TextBox Elemente haben hier immer den gleichen Wert und zwar sofort. Egal in welcher TextBox man den Wert verändert. Eine Rückkopplung findet nicht statt. Damit beide TextBox Elemente mit einem Binding zusammengehängt werden können, müsste man wahrscheinlich ein zusätzliches DependencyProperty einführen, zu welchem man ein Binding aufbaut. Müsste man sich noch genauer überlegen, ist aber auf jedenfall möglich. Ich habe nämlich schon mal sowas ähnliches gebaut
Grüssli
-
// wegedit wegen blödsin