2013-08-23 23 views
6

Ho due sul lato sinistro di uno dei miei TabControls, li chiamo GroupBox A (in alto a sinistra) e GroupBox B (in basso a sinistra). I GroupBox non vengono ridimensionati come spero.C# Winform: GroupBox non ridimensionato

Esempio: Quando ho ridimensionare il form principale che ha i TabControls con il mio mouse, o massimizzare, o spostarlo in uno schermo con risoluzione più bassa, GroupBox B mantiene la sua larghezza/altezza. Questo fa sì che GroupBox B disegni su GroupBox A, un po 'come un effetto "sempre in primo piano".

desiderata: auspica che entrambe le GroupBoxes per ridimensionare secondo l'uno all'altro/proporitionally e si adattano l'area sono dati.

Idee?

+0

Controlla l'applicazione CSS –

+1

Grazie a Sourabh, ma non ne ho uno, questa applicazione è l'app Winform. – scryptKiddy

+0

Ok, quindi imposta la proprietà del dock su FILL e funziona sicuramente su –

risposta

6

Un tableLayoutPanel può essere d'aiuto.

  1. Aggiungere un tableLayoutPanel e ridimensionarlo in base alle proprie esigenze.
  2. Anchor tavolo da Alto, Basso, Sinistra e Destra
  3. Mettere GroupBoxA nella cella in alto a sinistra della tabella
  4. Mettere GroupBoxB nella cella in basso a destra della tabella
  5. Per entrambi dimensioni GroupBox di conseguenza e ancorarli a tutti e 4 i lati.
  6. Ora cresceranno e si ridurranno in proporzione con l'app.

Inoltre, è possibile aggiungere altri controlli al tavolo. Se è necessario un controllo su più righe o colonne, utilizzare la proprietà RowSpan/ColumnSpan.

+0

Ancora testando quella risposta, ancora nessuna fortuna. Sei sicuro di volere GroupBox A nella cella in alto a sinistra e GroupBox B nella cella in basso a destra? Non sarebbe GroupBox A nella cella in alto a sinistra e GroupBox B in cella in basso a sinistra? In altre parole, il tableLayoutPanel si ottiene con una colonna? – scryptKiddy

+0

Dipende dal tuo layout. Se due celle ti danno quello che vuoi, allora puoi usare una colonna e poi armeggiare con l'ancoraggio per ottenere l'effetto desiderato. Se vuoi assicurarti che GroupBoxB non si sovrapponga alla parte inferiore o destra di GroupBoxA, avrai bisogno di 2 colonne. Se ti interessa solo non passare il fondo, è necessaria solo una colonna. – jmstoker

+0

sì, solo due caselle di gruppo su un tabControl sul lato sinistro. Uno sopra l'altro. Alla loro destra c'è un DataGridView. Tutti si ridimensionano bene tranne i GroupBox. Ancora giocando con l'ancoraggio e così via, ancora senza fortuna. Il meglio che posso ottenere è dopo aver messo i due groupBox in una singola colonna tableLayoutPanel, uno sopra l'altro, ancorandoli entrambi a TBLR, le caselle di gruppo mostrano solo metà disegnate e sono troncate. Molto strano. Dovrei caricare screenshot di questo? – scryptKiddy

1

Ho affrontato un problema simile, avevo appena usato il contenitore di divisione per entrambi i GroupBox, ancorato il contenitore di suddivisione in alto, in basso, a sinistra a destra del mio modulo principale, ed entrambi i GroupBox, in alto, in basso, a sinistra e diritto dei loro contenitori

1

Leggermente fuori tema dalla domanda originale, ma il mio problema era che il mio campo MaximumSize della mia casella di gruppo non era impostato, o era troppo piccolo, quindi non potevo ridimensionare l'altezza!

1

In alto la domanda è piuttosto vecchia, qualcuno potrebbe ancora trovarlo utile ... Ho avuto lo stesso problema e ho trovato una soluzione funzionante -> invece di modificare la larghezza/altezza del GroupBox, cambia la sua larghezza/altezza minima nel metodo di ridimensionamento del form

edit: errore di battitura fisso

private void Form1_Resize(object sender, EventArgs e) { 
     groupBox1.MinimumSize = new Size(this.Width /2, this.Height); 
    } 
2

Se il GroupBox è all'interno di un altro controllo come una scheda o qualcosa del genere, quindi fare come di seguito:

nel mio caso ho avuto un GroupBox all'interno un ta b e ho chiamato i seguenti metodi nel metodo InitializeComponent() per forzare la GroupBox ad adattarsi alle dimensioni della scheda.

this.groupBox4.ResumeLayout(false); 
this.groupBox4.PerformLayout(); 
this.tabPage2.ResumeLayout(false); 
this.tabPage2.PerformLayout(); 

E se si dispone di più GroupBox, è necessario impostare l'ancoraggio di conseguenza.