2 x 2 Textboxen aktuell halten.


  • Administrator

    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.aspx

    Das praktische an dem ist, dass es nur auf true ist, wenn auch der User etwas verändert hat. Wenn du über die Property Text eine Änderung duchführst, wird Modified auf false 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 zuschalten

    Wenn 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 -)


  • Administrator

    @CSL & Th69,
    Lest doch bitte mal durch, was das Property Modified 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.


  • Administrator

    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.


  • Administrator

    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 😃


Anmelden zum Antworten