Benutzer mit den meisten Antworten
Änderungen in vorbelegten Textfeldern erkennen

Frage
-
Hallo,
ich bin dabei, meine erste Anwendung in Visual Basic zu programmieren. Ich habe dabei folgendes Problem:
Ich verwende ein DataGridView mit Daten, die der Benutzer ändern darf. Beim DoppelClick auf eine Zelle öffnet sich ein Formular, das die Daten einer Zeile in Textboxen bereithält. Der Benutzer kann dann die Daten im Formular ändern und auf OK clicken, um sie zu übernehmen, oder auf Abbrechen clicken, um sie zu verwerfen. Ich möchte den Benutzer im zweiten Fall fragen, ob die Änderungen verworfen werden sollen. Beim Laden des Formulars wird eine Variable bModified auf False gesetzt. Im TextChanged Event der Textfelder setze ich diese auf True. Sobald der Benutzer auf Abbrechen clickt, wird der Zustand dieser Variable abgefragt und in Abhängigkeit davon eine Meldung ausgegeben. Leider wird die Meldung ausgegeben, auch wenn der Benutzer keine Änderungen macht. Ich Vermute, daß es an der Vorbelegung der Textfelder liegt. Hat jemand eine Idee, wie ich diese Abfrage implementieren kann?
Vielen Dank im Voraus für die Unterstützung.
Antworten
-
Hallo Elmar,
vielen Dank für Deine Antwort. Ich wollte mir als Anfänger und Hobbyprogrammierer nicht zu viel vornehmen, da sonst der Spaß am Lernen der Programmiersprache verlorengeht. Ich werde mich zu gegebener Zeit mit der Datenbindung beschäftigen. Obgleich dies ein recht komplexes Thema zu sein scheint, insbesondere wenn es um relationale Datenbanken geht.
Im Übrigen habe ich die Lösung für mein Problem gefunden. Die Textfelder werden beim Laden des Formulars über Properties vorbelegt. Dadurch wird ein TextChanged Event erzeugt. Die Variable bModified wird demzufolge gleich beim Laden auf True gesetzt. Wenn der Benutzer nun das Formular schließt, ohne eine Änderung gemacht zu haben, wird die MessageBox dennoch aufgerufen, weil die Variable beim Laden gesetz wurde. Ich habe also am Ende der Laderoutine die Variable wieder auf False gesetzt. Damit werden nur durch den Benutzer hervorgerufene Änderungen in den Textfeldern erfasst.
Schönen Gruß,
LittleBlueBird- Als Antwort markiert LittleBlueBird Dienstag, 4. August 2009 08:22
Alle Antworten
-
Hallo,
beschäftige Dich mit der Datenbindung in Windows Forms .
Dort sind viele Dinge, die Du ansonsten für jedes Steuerelement programmieren mußt,
bereits implementiert. Dort wird die Änderungsbenachrichtung direkt abgefangen und
auch die Validierung (richtige Eingabe) behandelt.
Für die Speicherung kannst Du ein DataSet oder eine eigene Klasse erstellen
und diese über eine BindingSource an das DataGridView oder andere Steuerelemente binden.
Ein DataSet ist für den Anfang häufig das einfachste. Es kann auch verwendet werden,
wenn die Speicherung nicht in einer Datenbank erfolgen soll.
Gruß Elmar -
Hallo Elmar,
vielen Dank für Deine Antwort. Ich wollte mir als Anfänger und Hobbyprogrammierer nicht zu viel vornehmen, da sonst der Spaß am Lernen der Programmiersprache verlorengeht. Ich werde mich zu gegebener Zeit mit der Datenbindung beschäftigen. Obgleich dies ein recht komplexes Thema zu sein scheint, insbesondere wenn es um relationale Datenbanken geht.
Im Übrigen habe ich die Lösung für mein Problem gefunden. Die Textfelder werden beim Laden des Formulars über Properties vorbelegt. Dadurch wird ein TextChanged Event erzeugt. Die Variable bModified wird demzufolge gleich beim Laden auf True gesetzt. Wenn der Benutzer nun das Formular schließt, ohne eine Änderung gemacht zu haben, wird die MessageBox dennoch aufgerufen, weil die Variable beim Laden gesetz wurde. Ich habe also am Ende der Laderoutine die Variable wieder auf False gesetzt. Damit werden nur durch den Benutzer hervorgerufene Änderungen in den Textfeldern erfasst.
Schönen Gruß,
LittleBlueBird- Als Antwort markiert LittleBlueBird Dienstag, 4. August 2009 08:22