Home Page
Articoli
Tips & Tricks
News
Forum
Archivio Forum
Blogs
Sondaggi
Rss
Video
Utenti
Chi Siamo
Contattaci
Username:
Password:
Login
Registrati ora!
Recupera Password
Home Page
Stanze Forum
App. WinForms / WPF .NET
Problema con classe di posizionamento dinamico controlli
martedì 17 febbraio 2009 - 11.43
Elenco Threads
Stanze Forum
Aggiungi ai Preferiti
Cerca nel forum
vankruton
Profilo
| Newbie
1
messaggi | Data Invio:
mar 17 feb 2009 - 11:43
salve sono un nuovo utente che sta provando un po a fare un piccolo programma ...
ho fatto una classe che mi dispone in modo dinamico i controlli secondo un modo di impaginazione in modo tale che qualunque sia la risoluzione dello schermo e varie impostazioni video possa avere un form leggibile, in particolare non mi vanno a capo i bottoni e non ne capisco la ragione
requisiti per far funzionare questa classe e' non avere buchi nel taborder del form passera i controlli seguendo il taborder e li disporra in modo lineare fin al margine del form se il controllo non vi entra va a capo
public void PosizionaControlliForm(System.Windows.Forms.Form F)
{
int i ;//Indice
int Interlinea=20;
//int CurrInt = 1;
int SpazioOrizStd =10;
int SpazioOrizCtoC=5;
int SpazioOrizLtoC=5;
int SpazioOrizLtoL=5;
int SpazioOrizCtoL=40;
int SpazioDalMargSx = 20;
int SpazioDalMargDx = 40;//Conteggiare la scrool
int SpazioDalMargUp = 20;
int MisuraOccupazione=0;
int LarghezzaForm = F.Size.Width;
int XStart=0;
int YStart=0;
System.Windows.Forms.Control CC; // Controllo Corrente
System.Windows.Forms.Control CP; // Controllo Precedente
System.Windows.Forms.Control CS; // Controllo Successivo
for (i = 0; i < F.Controls.Count; i++)
{
CC = CercaControllo(F, i);
if (i == 0)
{
PosizionaControllo(CC, SpazioDalMargSx, SpazioDalMargUp);
}
else
{
CP = CercaControllo(F, i - 1);
if (CP.Visible == true)
{
// Stabilisco il punto di partenza sull'asse X
if ((CP.GetType().Name == "Label") && ((CC.GetType().Name == "TextBox") || (CC.GetType().Name == "ComboBox")))
{
XStart = CP.Location.X + CP.Size.Width + SpazioOrizLtoC;
}
else if (((CC.GetType().Name == "TextBox") || (CC.GetType().Name == "ComboBox")) && CC.GetType().Name == "Label")
{
XStart = CP.Location.X + CP.Size.Width + SpazioOrizCtoL;
}
else if (CP.GetType().Name == "Label" && CC.GetType().Name == "Label")
{
XStart = CP.Location.X + CP.Size.Width + SpazioOrizLtoL;
}
else if (((CC.GetType().Name == "TextBox") || (CC.GetType().Name == "ComboBox")) && ((CC.GetType().Name == "TextBox") || (CC.GetType().Name == "ComboBox")))
{
XStart = CP.Location.X + CP.Size.Width + SpazioOrizCtoC;
}
else
{
XStart = CP.Location.X + CP.Size.Width + SpazioOrizStd;
}
// Voglio far andare a capo le etichette col relativo controllo
// label ComboBox
MisuraOccupazione = 0;
if (i + 1 < F.Controls.Count)
{
CS = CercaControllo(F, i + 1);
if (((CS.GetType().Name == "TextBox") || (CS.GetType().Name == "ComboBox")) && ((CC.GetType().Name == "Label")))
{
MisuraOccupazione = XStart + CC.Size.Width+ SpazioOrizLtoC + CS.Size.Width;
}
}
else
{
// Stabilisco il punto di partenza sull'asse Y
MisuraOccupazione = XStart + CC.Size.Width;
}
if (MisuraOccupazione < (LarghezzaForm - (SpazioDalMargDx + SpazioDalMargSx)))
{
YStart = CP.Location.Y;
}
else
{
YStart = CP.Location.Y + CP.Size.Height + Interlinea;
XStart = SpazioDalMargSx;
}
// Eccezione il menu che va sempre a capo e occupano tutta la riga
if (CC.GetType().Name == "MenuStrip")
{
YStart = CP.Location.Y + CP.Size.Height + Interlinea;
XStart = SpazioDalMargSx;
}
if (CP.GetType().Name == "MenuStrip")
{
YStart = CP.Location.Y + CP.Size.Height + Interlinea;
XStart = SpazioDalMargSx;
}
// Eccezione per le DataGridView che va sempre a capo e occupano tutta la riga
// e si ridisegna al variare delle dimensioni del form
if (CC.GetType().Name == "DataGridView")
{
YStart = CP.Location.Y + CP.Size.Height + Interlinea;
XStart = SpazioDalMargSx;
System.Drawing.Size m = new System.Drawing.Size();
m.Height = CC.Size.Height;
m.Width = F.Size.Width - (SpazioDalMargDx + SpazioOrizStd);
CC.Size = m;
CC.Refresh();
}
if (CP.GetType().Name == "DataGridView")
{
YStart = CP.Location.Y + CP.Size.Height + Interlinea;
XStart = SpazioDalMargSx;
}
// Eccezione per i GroupBox che occupano tutta la riga e vanno a capo
if (CC.GetType().Name == "GroupBox")
{
YStart = CP.Location.Y + CP.Size.Height + Interlinea;
XStart = SpazioDalMargSx;
}
if (CP.GetType().Name == "GroupBox")
{
YStart = CP.Location.Y + CP.Size.Height + Interlinea;
XStart = SpazioDalMargSx;
}
// Eccezione per le etichette che contengono la parola
// TITOLO che vanno a capo e OCCUPANO tutta la riga
if ((CC.GetType().Name == "Label") && (CC.Name.ToString().ToUpper().Contains("TITOLO")))
{
YStart = CP.Location.Y + CP.Size.Height + Interlinea;
XStart = SpazioDalMargSx;
}
if ((CP.GetType().Name == "Label") && (CP.Name.ToString().ToUpper().Contains("TITOLO")))
{
YStart = CP.Location.Y + CP.Size.Height + Interlinea;
XStart = SpazioDalMargSx;
}
// Eccezione per le etichette che contengono la parola
// TITOLETTO che vanno a capo e NON OCCUPANO tutta la riga
if ((CC.GetType().Name == "Label") && (CC.Name.ToString().ToUpper().Contains("TITOLETTO")))
{
YStart = CP.Location.Y + CP.Size.Height + Interlinea;
XStart = SpazioDalMargSx;
}
}
else
{
XStart = CP.Location.X;
YStart = CP.Location.Y;
}
// Posiziono il controllo
PosizionaControllo(CC, XStart, YStart);
}
}
}
public Control CercaControllo(Form f, int indicetab)
{
foreach (Control C in f.Controls)
{
if (C.TabIndex == indicetab)
{
return C;
}
}
return null;
}
public void PosizionaControllo(System.Windows.Forms.Control C, int x, int y)
{
System.Drawing.Point np= new System.Drawing.Point(x,y);
C.Location = np;
}
Ringrazio anticipatamente per il tempo che mi dedicherete, sperando che qualche guru mi illumini sul perche' del mio problema saluto tutti
Torna su
Stanze Forum
Elenco Threads
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 !