2013-02-28 36 views
7

Ho letto diverse domande di overflow dello stack senza trovare una buona soluzione di lavoro per il mio problema. Come posso ridimensionare i miei controlli ogni volta che il modulo viene ridimensionato? Mi piacerebbe che diventassero più grandi o più piccoli quando la forma diventasse più grande o più piccola.Ridimensionamento dei controlli con ridimensionamento modulo

In Visual Basic questo era abbastanza facile da fare con la proprietà form.Zoom (che non richiedeva realmente il ridimensionamento dei controlli, ma risolveva ciò di cui avevo bisogno). Sfortunatamente questo non è disponibile in C# winforms.

ecco alcune altre cose che hanno provato senza fortuna:

private void formMain_Resize(object sender, EventArgs e) 
{/* 
double scale; 
this.scaleWidth = (float)this.Width/(float)this.origWidth; 
this.scaleHeight = (float)this.Height/(float)this.origHeight; 
if (this.scaleHeight > this.scaleWidth) 
{ 
    scale = this.scaleHeight; 
} 
else 
{ 
    scale = this.scaleWidth; 
} 

foreach (Control control in this.Controls) 
{ 
    control.Height = (int)(control.Height * this.scaleHeight); 
    control.Width = (int)(control.Width * this.scaleWidth); 
    this.Refresh(); 
    // control.Font = new Font("Verdana", control.Font.SizeInPoints * heightRatio * widthRatio); 
} 
///////This scaling didnt work for me either 
//this.Scale(new SizeF(this.scaleWidth, this.scaleHeight)); 
//this.Refresh(); 
*/ 
} 

Se ho trascurato un campione actualy lavoro del codice su un'altra domanda Stack Overflow Mi piacerebbe vederlo, ma quelli che ho trovato erano simili a quelli sopra i quali non funzionano.

Forse mi stavo abusando e qualcuno potrebbe pubblicare un codice di esempio da mostrare per quelli di noi che continuano a fare questa domanda come risolvere il problema.

Inoltre, ho provato a utilizzare alcuni degli strumenti di ancoraggio/attracco pensando che lo avrebbero consentito automaticamente ma non è stato così.

+0

hai usato dock e proprietà di ancoraggio ..... prova a usarli in un modo migliore .... dovrebbero essere la tua chiave del successo immagino. Posso anche chiedere una schermata della tua interfaccia utente? – Sandy

risposta

1

Ho trovato una soluzione alternativa che funziona bene per me, apprezzare eventuali commenti negativi o positivi sulla soluzione.

Utilizzo di diversi contenitori suddivisi e contenitori divisi all'interno dei contenitori divisi in diverse regioni Sono in grado di separare i pezzi principali del layout e, all'interno di essi, utilizzando Docking and Anchoring, sono in grado di realizzare esattamente ciò che volevo fare - funziona magnificamente

Vorrei sottolineare che alcune persone online menzionano i contenitori divisi che utilizzano molte risorse.

5

Utilizzare Anchor del controllo. C'è un'opzione per ancorare la parte superiore, inferiore, sinistra e destra. E tu sei bello andare.

+1

Dichiara di aver già provato ancore/banchine. Inoltre, la domanda implica che egli desideri che tutti i controlli siano scalabili in modo uniforme. Quindi questa non è la risposta alla domanda. –

+0

Potrebbe usare l'ancora/banchine. La domanda è: l'ha usato correttamente? –

+0

Ho provato l'ancoraggio e il dock e sembra solo "spostare" i controlli attorno al ridimensionamento, ma non ridimensionare i controlli effettivi – Kairan

1

Quello che stai cercando di fare nel tuo codice è quello di cambiare le dimensioni dei controlli che non è un approccio così buono. In genere, le dimensioni dei pulsanti e dei riquadri di testo non devono essere modificate quando si ridimensiona il modulo, ma spesso devono spostarsi (cambiare posizione). Alcuni controlli devono modificare le dimensioni in base al formato ridimensionato e, nella maggior parte dei casi, solo una dimensione. I controlli centrali che vengono utilizzati per l'area di lavoro (se si sta sviluppando lo strumento per disegnare per esempio) dovrebbero cambiare le dimensioni di entrambe le dimensioni. Tutto ciò che puoi ottenere impostando correttamente le proprietà Dock e/o Anchor dei controlli.

textBox1.Dock = DockStyle.Bottom; 
textBox1.Anchor = AnchorStyles.Bottom & AnchorStyles.Left; 

Tutti questi sono anche facilmente impostabili nel pannello Proprietà quando si utilizza il designer.

Ma se questo non è abbastanza per voi, in rari casi, sarà sicuramente desidera modificare solo la posizione del controllo:

textBox1.Location = new Point(newX, newY); 
15

L'opzione migliore è quello di utilizzare un TableLayoutPanel. Inserire TableLayoutPanel nel modulo, impostare la proprietà Dock su Fill, creare righe e colonne richieste e inserire i controlli all'interno delle celle. Ovviamente è necessario impostare Dock/Anchor sui controlli all'interno delle celle, in modo che rispondano alle modifiche apportate alle dimensioni della cella. In alcune situazioni potrebbe essere necessario inserire un Panel in una cella e rilasciare i controlli al suo interno, poiché ogni cella può contenere solo un singolo controllo. Potrebbe inoltre essere necessario impostare RowSpan/ColumnSpan sui controlli.

Utilizzando uno TableLayoutPanel, si ha il controllo completo su come devono essere organizzati i cotrols. È possibile impostare la dimensione assoluta o percentuale per righe e colonne.

1

Se i controlli si trovano in una casella di gruppo, assicurarsi di impostare le proprietà delle caselle di gruppo da ridimensionare. I controlli all'interno della scatola sono controllati dalla scatola. La dimensione della scatola (a meno che non si trovi in ​​un'altra scatola) sia controllata dal modulo.

Problemi correlati