Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11
  1. #1
    Utente di HTML.it L'avatar di escocat
    Registrato dal
    Feb 2012
    Messaggi
    308

    [C#] TextBox multiline con ScrollBar "automatica"

    Buongiorno. Ho un file .txt

    string file = "ciao.txt";

    ed una textBox1 multiline con ScrollBar verticale dentro la quale scrivo il contenuto di file:

    string r = File.ReadAllText(file);
    textBox1.Text = r;
    textBox1.Focus();
    textBox1.DeselectAll();

    Senonchè una delle righe del file .txt inizia per una stringa "particolare" (per es. "§"). Il comando textBox1.Text = r mi fa vedere il testo di ciao.txt partendo dalla prima riga e se voglio leggere le altre righe devo "scendere" la ScrollBar e questo è buono.
    Ora io vorrei che il controllo textBox1 mi faccia vedere come prima riga della textBox quella che inizia per "§" e la ScrollBar già "scesa" al punto giusto. Ho cercato di studiare per bene la classe textBox ma è infinita e contiene un miliardo di proprietà e metodi e mi sono perso. Con Select riesco a selezionare una sottostringa ma rimane "nascosta" al di fuori della finestra della textBox e questo non mi interessa (per ora). Con textBox1.SelectionStart il cursore va dove voglio ma anche questa volta rimane nascosto e non all'inizio della finestra.
    Mi aiutate? Grazie

  2. #2
    Utente di HTML.it
    Registrato dal
    Jan 2011
    Messaggi
    237
    Ciao.
    Qui http://bytes.com/topic/visual-basic-...e-through-code
    Dicono di usare la funzione "ScrollToCaret che dovrebbe portarti alla riga dove hai il cursore.. Non ho provato però.

  3. #3
    Utente di HTML.it L'avatar di escocat
    Registrato dal
    Feb 2012
    Messaggi
    308
    OK renygade! ScrollToCaret è quello che ci voleva. Insieme a SelectionStart fa il suo dovere. Grazie

  4. #4
    Utente di HTML.it
    Registrato dal
    Jan 2011
    Messaggi
    237
    Prego.

  5. #5
    Utente di HTML.it L'avatar di escocat
    Registrato dal
    Feb 2012
    Messaggi
    308
    ....insomma proprio il suo dovere no.... la riga § mi compare alla fine della finestra non all'inizio....

    codice:
           public static string Mid(string a, int x, int l)
            {
                if (x - 1 + l > a.Length) 
                    return a.Substring(x - 1, a.Length - x + 1);
                else
                    return a.Substring(x - 1, l);
            }  
                                                                                                    
            public static int Instr(string a, string b, int x)
            {
                for (int k = x; k < a.Length + 1; k++)
                {
                    if (Mid(a, k, b.Length) == b)
                        return k;
                }
                return 0;
            }                                                                                                                                                                                               
                              
            
            string file = "ciao.txt";
            string r = File.ReadAllText(file);
            int z = Instr(r, "§", 1);
            textBox1.SelectionStart = z;
            textBox1.ScrollToCaret();
            textBox1.Focus();
            textBox1.DeselectAll();
    Ultima modifica di escocat; 08-12-2013 a 15:34

  6. #6
    [OT] Ma perché ti reimplementi Instr e Mid? Usa i metodi della classe string... [/OT]
    Amaro C++, il gusto pieno dell'undefined behavior.

  7. #7
    Utente di HTML.it L'avatar di escocat
    Registrato dal
    Feb 2012
    Messaggi
    308
    [OT] bè se contiamo il numero di caratteri della firma di Instr e quello del suo codice....(più quello di Mid) ... c'è una bella differenza. E poi anche un pò di nostalgia....

  8. #8


    codice:
    int z = r.IndexOf('§');
    senza bisogno di reinventarsi la ruota.

    Comunque, leggendo la documentazione di ScrollToCaret, si trova
    If the caret is positioned below the visible region of the control, the ScrollToCaret method will scroll the contents of the control until the caret is visible at the bottom of the control. If the caret is positioned above the visible region of the control, this method scrolls the contents of the control until the caret is visible at the top of the control.
    Quindi, quello che puoi fare è prima fare uno scroll in fondo al testo, e quindi dirgli di andare al punto giusto:
    codice:
            string file = "ciao.txt";
            string r = File.ReadAllText(file);
            textBox1.SelectionStart = r.Length - 1
            textBox1.ScrollToCaret();
            textBox1.SelectionStart = z;
            textBox1.ScrollToCaret();
            textBox1.Focus();
            textBox1.DeselectAll();
    Amaro C++, il gusto pieno dell'undefined behavior.

  9. #9
    Utente di HTML.it L'avatar di escocat
    Registrato dal
    Feb 2012
    Messaggi
    308
    Bravo MItaly! Funziona come un'orologio!
    Meno bravo per quanto riguarda l'OT: a parte il fatto che IndexOf non fa quello che deve fare (o meglio: fa un'altra cosa più limitata) dunque questa ruota non mi serve, hai guardato cosa fa Mid? Quest'altra ruota in C# non esiste!
    Ciao e grazie.

  10. #10
    Quote Originariamente inviata da escocat Visualizza il messaggio
    Bravo MItaly! Funziona come un'orologio!

    Meno bravo per quanto riguarda l'OT: a parte il fatto che IndexOf non fa quello che deve fare (o meglio: fa un'altra cosa più limitata) dunque questa ruota non mi serve,
    Ad occhio tutto quello che può fare la vecchia InStr lo possono fare i vari overload di IndexOf.
    hai guardato cosa fa Mid? Quest'altra ruota in C# non esiste!
    La funzione Mid viene rimpiazzata dai vari overload di Substring, l'istruzione Mid di VB6 invece non ha equivalente diretto, ma si può sostituire con opportuni metodi di StringBuilder.
    Amaro C++, il gusto pieno dell'undefined behavior.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.