我的winform上有一个Panel控件,里面会显示多个面板。对于每个内部面板,我设置它的高度。但有些内容较少,有些内容较多。
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但结果是相同的。
答案 0 :(得分:1)
如果外部Panel
有Autosize = true
,将能够看到所有内部Panels
。的承诺。
如果你没有,你的设置有误。确保内部Dock
中未使用Anchor
和Panels
的不需要的设置。
编写代码以查找所有内部面板的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
,那么这可能很有用。除此之外:AutoSize
属性将完成它的工作!
答案 1 :(得分:0)
这是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;
如果您不想管理每个小组的高度,那么它只是实现目标的一种解决方法。