Paging in Windows Forms C# [.Net Framework 4.0]

martedì 28 maggio 2013 - 10.39
Tag Elenco Tags  C#  |  VB.NET  |  .NET 1.0  |  .NET 1.1  |  .NET 2.0  |  .NET 3.0  |  .NET 3.5  |  .NET 4.0

vankraster Profilo | Newbie

Buongiorno a tutti,

Ho la necessità di fare paging su una ipotetica label, cioè associando un testo abbastanza lungo ad una label(potrebbe essere qualsiasi altro controllo di visualizzazione testo) io cambiando pagina il controllo capisca subito dov'è rimasto di modo che mi cambia la seconda pagina, tutto ciò anche cambiando dimensione della Font.

Per ora ho fatto così:
numero righe da pescare all'interno del testo = altezza finestra / (dimensione font *2.4)
Questo però mi produce delle problematiche specialmente quando ridimensiono la form, la label essendo attaccata alla Form, mi nasconde delle righe se diminuisco l'altezza e se la aumento rimane troppo spazio sotto.

Questo perché ho dei testi scritti in file TXT e vorrei aprirli con un programma C# che mi possa fare le paginature del testo.
Spero sia stato abbastanza chiaro.

Grazie.

Dev01 Profilo | Newbie

Ciao,

devi richiamare la routine che esegue la paginazione dall'evento Resize.

In questo modo, previo svuotamento del controllo che contiene il testo, verranno rieffettuati i calcoli relativi la paginazione.
01000100 01100101 01110110 00101101 00110000 00110001

vankraster Profilo | Newbie

Il problema non è solo quello, cioè quando la riga è abbastanza lunga e la larghezza è minore della lunghezza della riga allora viene divisa in 2 righe quindi il calcolo sopra fatto non è più esatto. La cosa migliore sarebbe trovare un controllo che implementa anche la paginazione.

Dev01 Profilo | Newbie

Da quello che ho capito tu vorresti creare una sorta di libro (quindi non modificabile) a partire da un testo di lunghezza arbitraria.

Se non sto sbagliando potresti operare in questo modo:

1) Crei un form e ci piazzi sopra un bel TabControl;
2) Copri le linguette con una picturebox;
3) Aggiungi nella prima pagina del TabControl un controllo visualizzatore di testo ancorato ai bordi e calcoli quanti caratteri possa contenere;
3a) puoi partire da qui: http://forum.html.it/forum/showthread/t-276862.html
4) Calcoli il numero di pagine da creare dividendo la lunghezza del testo per i caratteri visualizzabili in un singolo tab;
5) Aggiungi le pagine così determinate al TabControl e ci inserisci il controllo visualizzatore di testo;
6) Popoli un dictionary (of integer (il numero di pagina), integer (l'indice del testo da cui partire per il popolamento della pagina) e una variabile con la lunghezza delle sottostringhe del testo;
7) Popoli i controlli visualizzatori con le sottostringhe ottenute;
8) Esegui i calcoli allo StartUp e ad ogni Resize;
9) Corredi il tutto con due tasti di navigazione (pag.prec. e pag.succ) che ti consentano di spostarti fra le pagine richiamandone l'indice.

Se, invece, sto sbagliando, tenteremo un'altra soluzione a fronte di maggior chiarezza...

01000100 01100101 01110110 00101101 00110000 00110001

vankraster Profilo | Newbie

Grazie Dev, ho risolto facendo così: calcolando il numero di righe per vista con,

Double Text_Height = 0; using (System.Drawing.Graphics formGraphics = this.CreateGraphics()) { System.Drawing.Font drawFont = new Font("Arial", FontSize, FontStyle.Bold); Text_Height = formGraphics.MeasureString("AZUIJ", drawFont).Height; } return (int)Math.Truncate(this.lblVista.Height / Text_Height) -2;

Poi ho calcolato lo spazio occupato da una riga con :
Double Text_Width = 0; using (System.Drawing.Graphics formGraphics = this.CreateGraphics()) { System.Drawing.Font drawFont = new Font("Arial", FontSize, FontStyle.Bold); Text_Width = formGraphics.MeasureString(Riga, drawFont).Width; } if (this.lblVista.Width >= Text_Width+20) return 1; else return 2;

Quindi ora posso cambiare pagina con barra spaziatrice.
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2025
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5