Problema con classe di posizionamento dinamico controlli

martedì 17 febbraio 2009 - 11.43

vankruton Profilo | Newbie

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
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-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5