"Save" - Button nur aktivieren, wenn der Text wirklich geändert worden ist

  • VB.NET

Es gibt 9 Antworten in diesem Thema. Der letzte Beitrag () ist von Cane.

    "Save" - Button nur aktivieren, wenn der Text wirklich geändert worden ist

    Wenn ich nun auf den Node "Einführung" klicke, so erscheint im RichTextbox der Text "Das ist der Einführung-Text.".Hallo zusammen, ich habe folgende Problemstellung:

    In meinem Programm habe ich auf der linken Seite einen TreeView und auf der rechten Seite einen RichtTextBox.
    Im TreeView sind einige Nodes erfasst. Hier ein Beispiel:

    TreeView
    - Einführung (Node1)
    - Hauptteil (Node2)
    - Schluss (Node3)

    Wenn ich nun auf den Node "Einführung" klicke, so erscheint im RichTextbox der Text "Das ist der Einführung-Text.".
    Wenn ich nun auf den Node "Hauptteil" klicke, so erscheint im RichTextbox der Text "Das ist die Hauptteil-Text.".
    Wenn ich nun auf den Node "Schluss" klicke, so erscheint im RichTextbox der Text "Das ist der Schluss-Text.".

    Gleichzeit habe ich noch einen "Save"-Button, welcher per Default disabled ist.
    Nun, ich möchte überprüfen, sobald der Text eines jeweiligen Nodes geändert wurde (damit meine ich inkl. Abstand oder sonst was), dann sollte der Save-button gleich auf Enable wechseln.
    Im Falle, dass der Text zum ursprünglichem Text geändert werden sollte, so sollte es wieder Disabled werden.


    Ich habe bereits mit folgendem Code versucht, jedoch wenn ich den Node wechsle (z.B. vom Node "Einfühung" zur Node "Schluss", so hat das Programm das Gefühl ich habe den Text geändert. Das sollte nämlich nicht passieren.)

    VB.NET-Quellcode

    1. Private Sub RichTextBox_TextChanged(sender As Object, e As System.EventArgs) Handles RichTextBox.TextChanged
    2. If String.IsNullOrWhiteSpace(DirectCast(sender, RichTextBox).Text) Then
    3. btnSave.Enabled = False
    4. Else
    5. btnSave.Enabled = True
    6. End If
    7. End Sub



    VB.NET-Quellcode

    1. Private Sub TreeView_BeforeSelect(sender As Object, e As System.Windows.Forms.TreeViewCancelEventArgs) Handles TreeView.BeforeSelect
    2. If btnSave.Enabled = True Then
    3. Dim result As Integer = MessageBox.Show("Do you want to save the changes?", "Save", MessageBoxButtons.YesNoCancel)
    4. If result = DialogResult.Yes Then
    5. 'Do something...
    6. ElseIf result = DialogResult.Cancel Then
    7. 'Do something...
    8. ElseIf result = DialogResult.No Then
    9. 'Do something...
    10. End If
    11. End If
    12. End Sub



    Ich hoffe Ihr könnt mir hier weiterhelfen... Vielen Dank bereits im Voraus!! :thumbup:
    Dann enablest du den Button in der TextChanged erstmal. Danach frägst du den ausgewählten Node ab und danach, ob der Text der RichTextBox dem ursprünglichen Text entspricht. Wenn ja, disablest du den Button wieder. Ganz einfach. Die Abfrage die du gemacht hast, überprüft lediglich, ob der Text nichts oder nur Leerzeichen enthält. Aber das ist Quatsch.

    Lg
    @VB1963
    Das Problem ist, wenn der Text zum ursprünglichen Text wieder geändert wird, graut sich der Button nicht aus.


    Irgendwie finde ich den Lösungsansatz mit "wirst dir wohl zu Anfang den ursprünglichen Text merken müssen" nicht genügend.
    Nehmen wir mal ein ganz einfaches Beispiel, und zwar Microsoft Word. Habt ihr echt das Gefühl Word hat diese Funktion so eingebaut, dass er sich vor jeder Änderung im Word Dokument sich den ursprünglichen Text merkt? Wohl eher nicht oder...
    Ähm, so wie ich das sehe wurden dir doch schon Ideen genannt?

    Ich würde es so lösen.
    Beim Click auf ein Node wird ja wohl der Text an die RichTextBox übergeben.
    Hier würde ich nun auch einfach einen MD5 Hash vom Text erzeugen und in den Tag von der RichTextBox schreiben.
    Ich Text_Changed Event könnte man nun einen simplen Vergleich durchführen und dementsprechend den Button aktivieren oder deaktivieren.


    Edit:
    Noch was. Ich würde noch im Text_Changed Event bevor jedesmal ein neuer Hash bei jeder Eingabe eines Buchstaben erzeugt wird, einfach auf die Länge des Textes vergleichen.
    Also evtl. den Hash und die Länge des Originaltextes irgendwo merken. Damit hast du eigentlich alle Vorrausetzungen um einen relativ schnellen Vergleich durchführen zu können.
    Wenn die neue Textlänge nicht mehr der alten entspricht, wurde sowieso etwas verändert. Falls es doch der alten Länge entspricht, dann erzeugst du nen Hash und vergleichst diesen mit dem alten.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Cane“ ()