Ho una casella di gruppo che contiene un pannello di visualizzazione del flusso e il pannello di visualizzazione del flusso contiene una serie di controlli. Ho impostato il pannello di visualizzazione del flusso da agganciare al genitore. Poiché non so quanti controlli saranno presenti nel pannello, imposto la casella di gruppo Autosize su true e autosizemode per aumentare e ridurre. Quando faccio questo il groupbox si restringe come se fosse vuoto. Ho bisogno della didascalia quindi non posso rimuovere la groupbox. Qualcuno sa perché questo sta accadendo?Groupbox con un pannello di visualizzazione del flusso all'interno e autosize = true si restringe come se fosse vuoto
risposta
Non c'è nulla che impedisca a FlowLayoutPanel di ridursi a zero. Dovrai almeno impostare la proprietà AutoSize su True.
Si dichiara "Non so quanti controlli saranno nel pannello". Avete controlli nel FlowLayoutPanel in fase di progettazione? Se non lo fai, sembra un comportamento previsto. Il Pannello non ha nulla, quindi la sua dimensione desiderata è zero, quindi la dimensione desiderata del GroupBox è zero.
Se questo è il caso, è consigliabile che tutto si riduca quando si aggiungono effettivamente i controlli in fase di runtime.
Sì ho controlli in essa in fase di progettazione. Una volta ottenuto tutto funziona con un numero di controlli noto. questo codice verrà generato automaticamente in base a un file xml. A quel punto non saprò quanti controlli ci saranno. – scott
Si impostano le proprietà Ancoraggio: alto, basso, sinistra, destra per groupBox.
Stavo cercando di fare la stessa cosa oggi. Di seguito è la soluzione che ho trovato, che è di ancorare il FlowLayoutPanel all'interno di GroupBox e quindi utilizzare gli eventi Ridimensiona e ControlAdded di FlowLayoutPanel per attivare il ridimensionamento del GroupBox padre.
Il gestore di ridimensionamento trova la parte inferiore degli ultimi controlli nel FlowLayoutPanel e ridimensiona il GroupBox con spazio sufficiente per contenere i controlli più in basso nel FlowLayoutPanel.
Ho provato a utilizzare AutoSize = true su FlowLayoutPanel e GroupPanel. Ma sfortunatamente questo consente a FlowLayoutPanel di crescere orizzontalmente.
public partial class UserControl1 : UserControl
{
public UserControl1()
{
InitializeComponent();
int numGroupBoxes = 4;
for (int groupBoxIndex=0; groupBoxIndex<numGroupBoxes; groupBoxIndex++)
{
GroupBox groupBox = new GroupBox();
groupBox.Text = "Group " + groupBoxIndex;
groupBox.Size = new Size(this.Width, 0);
groupBox.Dock = DockStyle.Top;
this.Controls.Add(groupBox);
FlowLayoutPanel groupBoxFlowLayout = new FlowLayoutPanel();
groupBoxFlowLayout.Dock = DockStyle.Fill;
groupBox.Controls.Add(groupBoxFlowLayout);
int extraSpace = 25; // the difference in height between the groupbox and the contents inside of it
MethodInvoker resizeGroupBox = (() =>
{
int numControls = groupBoxFlowLayout.Controls.Count;
if (numControls > 0)
{
Control lastControl = groupBoxFlowLayout.Controls[numControls - 1];
int bottom = lastControl.Bounds.Bottom;
groupBox.Size = new Size(groupBox.Width, bottom + extraSpace);
groupBoxFlowLayout.Size = new Size(groupBoxFlowLayout.Width, bottom);
}
});
groupBoxFlowLayout.Resize += ((s, e) => resizeGroupBox());
groupBoxFlowLayout.ControlAdded += ((s, e) => resizeGroupBox());
// Populate each flow panel with a different number of buttons
int numButtonsInGroupBox = 3 * (groupBoxIndex+1);
for (int buttonIndex = 0; buttonIndex < numButtonsInGroupBox; buttonIndex++)
{
Button button = new Button();
button.Margin = new Padding(0, 0, 0, 0);
string buttonText = buttonIndex.ToString();
button.Text = buttonText;
button.Size = new Size(0,0);
button.AutoSize = true;
groupBoxFlowLayout.Controls.Add(button);
}
}
}
}
Ecco tre screenshot del controllo ridimensionata per varie larghezze diverse:
funziona bene, ma è una buona idea ridimensionare lo stesso usercontrol quando ridimensioni la groupbox. – Jerry
grazie. che ha fermato il restringimento, ma ha causato un altro problema. Cresce all'orizzonte causando la necessità di scorrere da un lato all'altro nel contenitore padre delle groupbox. lo scorrimento precedente era solo verticale. – scott
È possibile impostare MaximumSize.Width sul FLP per evitare ciò. –
grazie. anche quello ha funzionato. – scott