Jede Zeile der RichTextBox soll eine Nummer bekommen

  • VB.NET
  • .NET 4.5

Es gibt 18 Antworten in diesem Thema. Der letzte Beitrag () ist von wennig west.

    @wennig west Da gibt es gewiss mehrere Möglichkeiten.
    Eine ist ein UserControl mit einem Label und einer RichTextBox nebeneinander.
    Die RichTextBox enthält den Text, das Label die Zeilennummern.
    Beiden gibst Du denselben Font und immer, wenn in der RichTextBox was geändert wird, wird die Zeilennummerndarstellung upgedatet.
    Viel Spaß.
    RtbCtrl.zip
    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).
    VB-Fragen über PN / Konversation werden ignoriert!
    1.

    wennig west schrieb:

    RodFromGermany schrieb:
    b

    Das verwendete Zitat "b" von RfG ist hier doch ziemlich aus dem Zusammenhang gerissen und führt ohne Kontext zu kontroversen Diskussionen. :P
    2. Wir sind im Internet und ich wage zu behaupten, dass ein "Du" angebracht ist.
    3. Zusammenführen in eine RTB wäre bei dem Voraufwand der Labelerzeugung nicht sinnvoll und geht an der Sache vorbei. Oder meinst Du vielleicht das, was RfG bereits vorschlug: ein User Control (UCE) erzeugen: Das ist ne Kombi von CEs wie ein paar Labels und ner RTB (zumindest in Deinem Beispiel). Und dann kann man dieses UCE abspeichern und als fixe Kombi in ein weiteres Projekt einfügen. Somit sind die in dem UCE kombinierten CEs als feste Einheit in dem eigentlichen Projekt verfügbar. Quasi als eigenständiges Sammel-CE.
    ― Eine häufig von mir verwendete Abkürzung: CEs = control elements (Labels, Buttons, DGVs, ...)
    ― Meine wichtigste Programmiererkenntnis: Mühsam erhängt sich das Eichhörnchen.
    ― If Not GrammarIsOk() Then AssumeThatCodeIsOk = False
    ― »Oh, großes Spaghetticodemonster. Bitte schicke mir Durchblick! Oder zumindest eine Gabel. Oder – wenn es kein Besteck mehr gibt – zumindest Glasnudeln.«
    @wennig west Probiere den Code aus, den ich Dir gepostet habe.
    Füge die Dateien Deinem Projekt hinzu.
    Compiliere das Projekt, Du hast nun in Deiner projektgebundenen Toolbar ein neues Control:

    ziehe es auf Deine Form und feddich.
    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).
    VB-Fragen über PN / Konversation werden ignoriert!

    wennig west schrieb:

    Nur ich würde jetzt noch gerne
    Formuliere eine vollständige Aufgaben- bzw. Problembeschreibung.
    Berücksichtige dabei insbesondere, was passieren soll, wenn der Text der RichTextBox editiert wird und neue Zeilen hinzukommen oder gelöscht werden.
    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).
    VB-Fragen über PN / Konversation werden ignoriert!

    wennig west schrieb:

    Mir ist klar das es nicht funktioniert
    Wenn der Text nicht formatiert ist, kannst Du über RTB.Lines gehen.
    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).
    VB-Fragen über PN / Konversation werden ignoriert!
    Bestimmt ist es sehr einfach zu lösen und ich komm einfach nicht drauf also sry wenn ich jetzt schon nerve aber egal wie ich es versuche es kommt immer sie selbe Fehlermeldung: "Fehler 1 Der &-Operator ist für die Typen "1-dimensionales Array von String" und "String" nicht definiert".

    Was ich versucht habe:
    RichTextBox1.Text = rtb.Lines & lbLineNumbers.Text
    RichTextBox1.Lines = rtb.Lines & lbLineNumbers.Text
    RichTextBox1.Lines = rtb.Text & lbLineNumbers.Text

    RichTextBox1.Lines ist laut Fehlermeldung, ObjectBrowser und IntelliSense ein String-Array (= eine Ansammlung von Strings). Klar, dass man da nicht einfach was dazupacken kann, das Programm wüsste ja gar nicht, was es wohin packen soll. Wie sollen z.B. 5 Zeilen in 28 bestehende Zeilen integriert werden?
    Du musst schon mit den Einzelzeilen hantieren:

    VB.NET-Quellcode

    1. For Each RTBLine In RichTextBox1.Lines
    2. 'hier kommt Dein Code hin, was mit jeder einzelnen RTB-Zeile passieren soll, also z.B.: RTBLine = LineNumberForThisLine & ": " & RTBLine
    3. Next

    ― Eine häufig von mir verwendete Abkürzung: CEs = control elements (Labels, Buttons, DGVs, ...)
    ― Meine wichtigste Programmiererkenntnis: Mühsam erhängt sich das Eichhörnchen.
    ― If Not GrammarIsOk() Then AssumeThatCodeIsOk = False
    ― »Oh, großes Spaghetticodemonster. Bitte schicke mir Durchblick! Oder zumindest eine Gabel. Oder – wenn es kein Besteck mehr gibt – zumindest Glasnudeln.«

    VB.NET-Quellcode

    1. Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
    2. For Each RTBLine In RichTextBox1.Lines
    3. RichTextBox1.Text = lbLineNumbers.Text & rtb.Text
    4. RTBLine = lbLineNumbers.Text & ": " & RTBLine
    5. Next
    6. End Sub

    da passiert nichts :/
    @wennig west Schreib zunächst eine vollständige Problembeschreibung / Aufgabenstellung, sonnst kommst Du vom Hundertsten ins Tausenste!
    =====
    Was soll denn passieren?

    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).
    VB-Fragen über PN / Konversation werden ignoriert!

    wennig west schrieb:

    Naja also
    machst Du eine Form mit Button und zwei RichTextBoxen.

    VB.NET-Quellcode

    1. Dim lines = New List(Of String)
    2. Dim nummer = 1
    3. For Each line In RichTextBox1.Lines
    4. lines.Add(nummer & vbTab & line)
    5. nummer += 1
    6. Next
    7. RichTextBox2.Lines = lines.ToArray
    Feddich.
    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).
    VB-Fragen über PN / Konversation werden ignoriert!
    Oha, dann doch noch ein Schritt zurück, da das gepostete Dir wohl doch noch nicht reicht:

    VB.NET-Quellcode

    1. Dim NewRTBLines As New List(Of String)
    2. For Each RTBLine In RichTextBox1.Lines
    3. RTBLine = lbLineNumbers.Text & ". "& RTBLine
    4. NewRTBLines.Add(RTBLine)
    5. Next
    6. RichTextBox1.Lines = NewRTBLines.ToArray

    oder eben mit ner normalen For-Schleife:

    VB.NET-Quellcode

    1. Dim NewRTBLines As New List(Of String)
    2. For i = 0 To RichTextBox1.Lines.Count - 1
    3. NewRTBLines.Add(i.ToString & ". " & RichTextBox1.Lines(i))
    4. Next
    5. RichTextBox1.Lines = NewRTBLines.ToArray

    Aber nicht vergessen, auf RfGs Frage bzgl. der Aufgabe/Problemstellung zu antworten!
    ― Eine häufig von mir verwendete Abkürzung: CEs = control elements (Labels, Buttons, DGVs, ...)
    ― Meine wichtigste Programmiererkenntnis: Mühsam erhängt sich das Eichhörnchen.
    ― If Not GrammarIsOk() Then AssumeThatCodeIsOk = False
    ― »Oh, großes Spaghetticodemonster. Bitte schicke mir Durchblick! Oder zumindest eine Gabel. Oder – wenn es kein Besteck mehr gibt – zumindest Glasnudeln.«

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