
Ebbene sì: inizio oggi una nuova serie di guide dedicate al C# e GTK#. Non si tratta però di argomenti per chi è alle prime armi, ma, diciamo, per chi è già ad un livello intermedio. Queste guide sono appunti, frutto di problemi nati durante la realizzazione di alcuni progetti e risolti dopo ore (se non giorni
) di lavoro. Ma iniziamo subito a trattare il primo argomento, come da titolo TextBuffer, TextView e ScrolledWindow…Questi tre oggetti grafici (e non) delle librerie GTK, possono essere spesso usate insieme: nel TextBuffer viene memorizzato del testo da visualizzare poi nella TextView, la quale può essere contenuta in una ScrolledWindow, per evitare che il testo fuoriesca dai margini della TextView. Il problema è nato durante la realizzazione del programmino di chat: dovevo fare in modo che, nel momento in cui arriva un messaggio da un’altro client, venisse aggiunto il testo nel TextBuffer, e poi visualizzato nella TextView. Ma come fare per “scrollare” automaticamente la TextView quando i messaggi superano il margine inferiore? Qui entrano in gioco due nuovi oggetti: TextIter e TextMark.
Intanto dichiariamoli:
Gtk.TextIter iter_start;
Gtk.TextIter iter_end;
Gtk.TextMark last_pos;
string mark;
Avendo un’oggetto TextBuffer di nome buffer, dobbiamo conoscere i bounds, cioè i margini, i limiti del buffer stesso, in questo modo:
buffer.GetBounds(out iter_start,out iter_end);
Così, quando arriva un messaggio, sappiamo che dobbiamo piazzarlo al punto iter_end:
buffer.Insert(iter_end,message+"\n");
Ora troviamo di nuovo i margini:
buffer.GetBounds(out iter_start,out iter_end);
A questo punto, creiamo un TextMark (una sorta di segnalibro) e lo piazziamo al punto iter_end, che corrisponde alla fine del buffer:
last_pos=buffer.CreateMark(mark,iter_end,true);
Possiamo ora “scrollare la nostra TextView (txt_chat) fino alla fine del buffer:
txt_chat.ScrollMarkOnscreen(last_pos);
E cancelliamo il TextMark:
buffer.DeleteMark(last_pos);
Questo codice, nel mio caso, è ripetuto ogni volta che arriva un messaggio dal server, ma può essere usato, per esempio, all’interno di un ciclo for.
Finito! E nelle prossime puntate vedremo come creare e leggere un file xml, sempre in C#








[...] post here Share and Enjoy: These icons link to social bookmarking sites where readers can share and [...]