Form Text nach Bearbeitung ändern

  • VB.NET

Es gibt 10 Antworten in diesem Thema. Der letzte Beitrag () ist von Xylon.

    Form Text nach Bearbeitung ändern

    Hallo alle zusammen. Also ich stehe hier gerade mal wieder vor einem kleinen Problem. Ich wollte den Text der Form1 ändern, sobald der Text in der RTB geändert wurde. Nu ist es ja so, dass ich das Control einzeln erstellt und auf die Form1 gepackt habe. Darum habe ich also im Control und dort bei der RTB folgendes gemacht:

    VB.NET-Quellcode

    1. Static Count As Integer = 0
    2. Count += 1
    3. If Count = 1 Then
    4. Form1.Text = Form1.Text + " - EDITED"
    5. End If


    Das klappt schon ganz gut, nur manchmal ändert er das nicht, weil der Counter ja nicht zurückgesetzt wird. Das Problem ist nun, dass ich den Counter von der Form1 aus (z.B. wenn ich eine Datei öffne) nicht ändern, also zurücksetzen kann, und dieser Fall mit dem Counter nicht mehr eintritt. Vielleicht gibt's ja eine leichtere Lösung um das zu machen, aber ich hab selbst schon viel probiert und gegooglet. Der Name soll halt immer dieses - Edited angehängt bekommen, wenn eine Datei (egal ob neu oder gerade geöffnet) veränder wird. Das sähe sicher lustig aus, wenn man das ohne Counter in das TextChanged Event packt, aber das ist nicht mein Ziel :D

    Danke schonmal im Voraus!
    Wann soll die Änderung gemacht werden und wann nicht?
    Welche Formen und sonstige Klassen spielen da noch eine Rolle?
    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!
    Also: Der Titel der Form1 soll immer ein "Edited" Mark oder so ein "*" nach dem Dateinamen haben, wenn der Text der RTB halt geändert wird. Deshalb wollte ich ja den Code im TextChanged Event benutzen. Aber dann würde der Code ja ununterbrochen ausgeführt werden, weshalb der Form1 Titel dann irgendwann 500 Mal ein "Edited" oder "*" dahinter hat. Darum dachte ich ja an den Counter. Aber hier das Problem: Wenn man jetzt ein neues Dokument hat und den Text ändert, also direkt nach Programmstart, funktioniert alles bestens. Der Counter wird nicht zurückgesetzt, weil sonst wieder der Code immer ausgeführt werden würde. Und wenn ich jetzt schon einmal etwas bearbeitet habe, und der dann das "Edited" hinten anhängt, dann ist der Code einmal durchgelaufen.

    Wenn ich dann aber ein neues Dokukment erstelle, oder ein bestehendes öffne, und DANN den Text bearbeite, dann wird das "Edited" natürlich nicht angehängt, weil der Code aufgrund des Counters nicht mehr läuft. Leider ist es ja nicht möglich eine Variable zu deklarieren, die sowohl in der Form1 als auch in dem Control Editor.vb benutzt werden kann.

    Ich hoffe ich hab's nun verständlich geschildert :/

    Xylon schrieb:

    verständlich
    So was:
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Private MyName As String
    2. Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
    3. Me.Text = "Editor"
    4. MyName = Me.Text
    5. End Sub
    6. Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
    7. ' Hier Load
    8. If String.IsNullOrEmpty(RichTextBox1.Text) Then
    9. MyName = "Editor"
    10. Else
    11. MyName = "Dateiname"
    12. End If
    13. Me.Text = MyName
    14. End Sub
    15. Private Sub RichTextBox1_TextChanged(sender As System.Object, e As System.EventArgs) Handles RichTextBox1.TextChanged
    16. If RichTextBox1.Text <> "" Then
    17. Me.Text = Me.MyName & " *"
    18. End If
    19. End Sub
    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!
    @RodFromGermany: Das ist ja das Problem! Ich kann das so nicht machen:

    VB.NET-Quellcode

    1. If RichTextBox1.Text <> "" Then
    2. Me.Text = Me.MyName & " *"
    3. End If


    Das RTB TextChanged befindet sich in dem Control, und ich kann auf die Variable MyName nicht von dem Control aus zugreifen!
    @Xylon:: Dann musst Du MyName halt in das Control reinreichen, z.B. als 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!

    RodFromGermany schrieb:

    @Xylon:: Dann musst Du MyName halt in das Control reinreichen, z.B. als Property.

    nein - er soll aus seinem Control ein Event herausführen - gugge VeryBasics
    Unter Umständen braucht er sogar nur den Text seinem eigenen Control als Text zuweisen (jedes Control hat eine Text-Property), und dann feuert es automatisch ein TextChanged - Event.

    Habich noch nicht ausprobiert, könnte aber klappen.
    Falls es nicht von selbst klappt, kannmans das aber so implementieren, und das wäre sowohl das sauberste als auch das einfachste.