我有一个面板控制我的winform,它将显示多个面板在其中。对于每个内部面板,我正在设置它的高度。但有些人没有什么可展示的内容,有些则有更多内容。
Panel hrvPanel = new Panel();
ArrayList hrvColl = pnlColl ; //Panel collection list gets from a Method
if(hrvColl.Count == 0)
return;
int splits = 0;
for(int p= hrvColl.Count-1;p>=0;p--)
{
Panel hrv = hrvColl[p] as Panel;
hrv.Height = 150;
hrvPanel.Controls.Add(hrv);
//Adding splliter
if(splits < hrvColl.Count - 1)
{
Splitter splitGrid = new Splitter();
splitGrid.Dock = DockStyle.Top;
hrvPanel.Controls.Add(splitGrid);
splits++;
}
}
hrvPanel.Dock = DockStyle.Top;如何根据内容大小调整内部面板的高度?我尝试将hrv.AutoSize设置为true,然后只能看到最后一个面板和hrv.Dock = Top,但是结果是一样的。
发布于 2015-01-31 10:34:40
如果外部Panel有Autosize = true,那么将能够看到所有的内部Panels。我保证。
如果你不这样做,你就有一些设置错误。确保在内部Dock和Anchor中没有使用不必要的设置。
编写代码以找出所有内部面板上的Top + Height最大值也非常简单:
int max = 0;
foreach (Control ctl in panelOuter.Controls)
if (ctl.Top + ctl.Height > max) max = ctl.Top + ctl.Height;
panelOuter.Height = max + 3; // add the default margin!如果您只想设置Height并将Width保留为is..other,这可能会很有用:AutoSize属性将完成它的工作!
发布于 2015-01-28 07:15:11
这就是WPF克服Winform的地方,您可能无法在Winforms中自动做到这一点。但你可能会有这样的工作-
创建一个应该知道其首选高度的扩展面板类
class ExPanel : Panel
{
public int PreferredHeight
{
get;
private set;
}
public ExPanel(int preferredHeight)
: base()
{
PreferredHeight = preferredHeight;
}
}然后你可以用这门课作为-
ExPanel hrvPanel = new ExPanel(150);
System.Collections.ArrayList hrvColl = pnlColl; //Panel collection list gets from a Method
if (hrvColl.Count == 0)
return;
int splits = 0;
for (int p = hrvColl.Count - 1; p >= 0; p--)
{
ExPanel hrv = hrvColl[p] as ExPanel;
hrv.Height = hrv.PreferredHeight;
hrvPanel.Controls.Add(hrv);
//Adding splliter
if (splits < hrvColl.Count - 1)
{
Splitter splitGrid = new Splitter();
splitGrid.Dock = DockStyle.Top;
hrvPanel.Controls.Add(splitGrid);
splits++;
}
}
hrvPanel.Dock = DockStyle.Top;如果你不想管理你的每个面板的高度,这只是实现你的目标的一个解决办法。
https://stackoverflow.com/questions/28186346
复制相似问题