Selezione di righe di testo in RichTextBox

di il
3 risposte

Selezione di righe di testo in RichTextBox

Sono tornato ad occuparmi di vb.net dopo molto tempo e la ruggine si fa sentire, questo è il mio problema:

Carico un file txt in un RichTextBox e vorrei selezionare le prime 5 righe come faccio con il mouse per spostarle in una nuova posizione.

Questo è il poco codice che sono riuscito a produrre e che non risolve il problema ma mi trova una sola riga e neanche selezionata.

Spero in un aiuto da parte vostra      Grazie

    Private Sub SelezSettori_Click(sender As Object, e As EventArgs) Handles SelezSettori.Click
       Dim righeSelezionate As New List(Of String)
       Dim righeTotali() As String = IO.File.ReadAllLines("C:/Pesca/Gare Lago 20/SettoriGara3.txt")
       For Each riga As String In righeTotali
           If riga.Contains("1") Then
               righeSelezionate.Add(riga)
           End If
       Next
       For x = 0 To righeSelezionate.Count - 1
           RichTextBox1.Text = righeSelezionate(x) & vbCrLf
       Next
   End Sub

3 Risposte

  • Re: Selezione di righe di testo in RichTextBox

    25/11/2025 - Hank Voight ha scritto:

    mi trova una sola riga e neanche selezionata.

    Che non sia selezionata, ovvero che non contenga "1", è impossibile.

    Ne vedi una soltanto perché in realtà sovrascrivi in continuazione la proprietà Text invece di concatenarla. Diciamo che, per quanto ne so io, l'approccio corretto in questo caso sarebbe usare uno StringBuilder.

        Private Sub SelezSettori_Click(sender As Object, e As EventArgs) Handles SelezSettori.Click
           Dim righeTotali() As String = IO.File.ReadAllLines("C:/Pesca/Gare Lago 20/SettoriGara3.txt")
           Dim sb as New StringBuilder()
           For Each riga As String In righeTotali
               If riga.Contains("1") Then
                   sb.AppendLine(riga)
               End If
           Next
    
           
           RichTextBox1.Text = sb.ToString()
    
       End Sub

    Le stringhe concatenate in .NET mangiano memoria a pacchi e ci sono tutta una serie di classi per gestirle in modo efficiente. Se addirittura hai una stima di quello che potrebbe essere la lunghezza in caratteri del risultato minimo, potresti usare il costruttore che accetta la Capacity e rispamiare un pochetto di CPU a valle.

  • Re: Selezione di righe di testo in RichTextBox

    Grazie Sgrubak, la tua soluzione funziona correttamente ma non risolve il mio problema, in quanto nella RichTextBox rimangono solo le righe cercate e spariscono tutte le altre. Credo che la colpa sia mia per non essermi spiegato molto bene nel primo post.

    Ho un file txt con 20 righe di testo e ho bisogno di selezionare (o forse è meglio dire evidenziare) quelle che iniziano con “1”, come faccio attualmente con il mouse, per poterle poi spostare in una nuova posizione ma per fare questo ho bisogno che le altre righe rimangano visibili.

    Spero di essere stato più chiaro e ti ringrazio per il tempo e la collaborazione che mi stai dedicando

  • Re: Selezione di righe di testo in RichTextBox

    01/12/2025 - Hank Voight ha scritto:

    ho bisogno di selezionare (o forse è meglio dire evidenziare) quelle che iniziano con “1”, come faccio attualmente con il mouse, per poterle poi spostare in una nuova posizione

    Che, correggimi se sbaglio, sarebbe come dire che devi smistarle. Quindi mi chiedo se hai valutato la possibilità di usare due StringBuilder distinti:

        Private Sub SelezSettori_Click(sender As Object, e As EventArgs) Handles SelezSettori.Click
           Dim righeTotali() As String = IO.File.ReadAllLines("C:/Pesca/Gare Lago 20/SettoriGara3.txt")
           Dim sbCon1, sbSenza1 as New StringBuilder()
           For Each riga As String In righeTotali
               If riga.Contains("1") Then
                   sbCon1.AppendLine(riga)
               Else
               	   sbSenza1.AppendLine(riga)
               End If
           Next
    
           
           RichTextBox1.Text = sbSenza1.ToString()
    
    'sbCon1.ToString() lo assegni per dove vuoi spostare le linee
       End Sub

    In questo modo eviti il Taglia/Incolla che mi pare di intuire tu stia cercando di fare. Almeno, così io intendo il tuo "spostare in una nuova posizione".

    Se riesci a chiarire meglio il tuo intento, troviamo sicuramente il modo più efficiente di fare il tutto.

    La dichiarazione prendila con le pinze, non mi ricordo se accetta il New sulla dichiarazione multipla (ma mi pare di si. Alla peggio doppiala).

Devi accedere o registrarti per scrivere nel forum
3 risposte