Prüfen ob Werte von Controls sich geändert haben

  • VB.NET

Es gibt 8 Antworten in diesem Thema. Der letzte Beitrag () ist von Giftzwockel.

    Prüfen ob Werte von Controls sich geändert haben

    Hi,

    kann man irgendwie automatisiert alle Controls eine Form auf Änderung prüfen?
    Sprich... Kann man irgendwo prüfen lassen, ob irgend ein Control der Form nun einen anderen Wert als zum Aufruf der Form hat?
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    ... Nun solltest es selber wissen. :'D
    Organisiere diese Werte als Property, da kannst Du im Setter bei Änderung etwas tun, z.B. einen Event raisen.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Hmm...

    Okay. Ich glaub ich steh gerade etwas auf dem Schlauch was du meinst.
    Wie kann ich die Values von Controls einer Form als Property organisieren?

    EDIT:
    Um etwas zu verdeutlichen was ich meine...
    Es handelt sich um einen Settings-Dialog, der Werte in die My.Settings schreibt.
    Aktuell läuft das über einen "Speichern"-Button.

    Nun möchte ich jedoch ganz gerne, dass wenn der User Änderungen vornimmt und nicht speichert, er beim Verlassen der Form nochmal gefragt wird, ob er die Einstellungen speichern mag.
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    ... Nun solltest es selber wissen. :'D

    MemoAnMichSelbst schrieb:

    Wie kann ich
    So, Du musst es natürlich aufrufen.

    VB.NET-Quellcode

    1. Public Property Button1Text As String
    2. Set(value As String)
    3. If value = Button1.Text Then
    4. Return
    5. End If
    6. Button1.Text = value
    7. MessageBox.Show("Button1.Text hat sich geändert")
    8. End Set
    9. Get
    10. Return Button1.Text
    11. End Get
    12. End Property
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    klingt malwieder bischen nach fehlender Trennung von Daten und Oberfläche.

    So als ob du eine "HasChanges"-Property programmieren möchtest, wie das typisierte Dataset sie hat.

    Also wenn nicht Event-mäßig unmittelbar reagiert werden muß, dann würde ich wohl einen HashCode bilden über die fraglichen Control-Props, und mir den merken.
    Also ich verweise auf mein kleines Edit oberhalb.

    Ich habe hier kein direktes Data-Binding. Ich wüsste aktuell auch nicht wie ich das im Rahmen der My.Settings anstellen sollte.

    Im Prinzip kenne ich es von der Arbeit mit Datasets, dass ich abfragen kann ob es Änderungen gab und anschließend dem User die Entscheidung überlasse: Speicher?! Ja/Nein.

    Wenn ich mir aus den My.Settings in diesem Fall so nen Konstrukt schustern könnte, wäre das natürlich ideal. Aber ich wüsste bis jetzt nicht wie ich das machen sollte.

    Rods Idee ist glaub ich für meinen Anwendungsfall nicht die ideale Lösung, da ich nicht direkt auf eine Änderung reagieren will, sondern erst beim Beenden der Form.

    Ich hatte mir schon überlegt für jedes Control im Changed Event eine Variable "HasChanges" auf True zu setzen... Aber so ne Frickelei für jedes Control ist auch bisl... lästig. Hätte es gern simpler gehabt, wenn VB es angeboten hätte.
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    ... Nun solltest es selber wissen. :'D

    MemoAnMichSelbst schrieb:

    Nun möchte ich jedoch ganz gerne, dass wenn der User Änderungen vornimmt und nicht speichert, er beim Verlassen der Form nochmal gefragt wird, ob er die Einstellungen speichern mag.
    Jo, das ist genau die HasChanges-Logik vom Dataset, und wennde Dataset nicht verwendest, musste halt wie gesagt alle relevanten Controls durchgehen, und deren relevante Property in einen HashCode zusammenführen.
    Dasselbe beim Schließen, und dann die beiden Hashwerte vergleichen.

    Am besten du codest dir wirklich eine HasChanges-Property mit Setter und Getter, die diese Verantwortlichkeit übernimmt. Dann kannst du auch nachm Abspeichern HasChanges auf False zurücksetzen.

    Das mitte HashCodes ist ganz einfach, weil in .Net jedes Objekt über die Methode .GetHashCode verfügt. Und mehrere Hashcodes vereinigen kannst du ganz simpel mit bitweisem Or
    Na gut,

    dann werd ich mich da mal ein wenig einwuseln. Man lernt ja nie aus ^^
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    ... Nun solltest es selber wissen. :'D