首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >windows窗体中面板控制的大小调整

windows窗体中面板控制的大小调整
EN

Stack Overflow用户
提问于 2015-01-28 06:55:22
回答 2查看 2.2K关注 0票数 0

我有一个面板控制我的winform,它将显示多个面板在其中。对于每个内部面板,我正在设置它的高度。但有些人没有什么可展示的内容,有些则有更多内容。

代码语言:javascript
复制
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,但是结果是一样的。

EN

回答 2

Stack Overflow用户

发布于 2015-01-31 10:34:40

如果外部PanelAutosize = true,那么将能够看到所有的内部Panels。我保证。

如果你不这样做,你就有一些设置错误。确保在内部DockAnchor中没有使用不必要的设置。

编写代码以找出所有内部面板上的Top + Height最大值也非常简单:

代码语言:javascript
复制
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属性将完成它的工作!

票数 1
EN

Stack Overflow用户

发布于 2015-01-28 07:15:11

这就是WPF克服Winform的地方,您可能无法在Winforms中自动做到这一点。但你可能会有这样的工作-

创建一个应该知道其首选高度的扩展面板类

代码语言:javascript
复制
class ExPanel : Panel
{
    public int PreferredHeight
    {
        get;
        private set;
    }
    public ExPanel(int preferredHeight)
        : base()
    {
        PreferredHeight = preferredHeight;
    }
}

然后你可以用这门课作为-

代码语言:javascript
复制
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;

如果你不想管理你的每个面板的高度,这只是实现你的目标的一个解决办法。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28186346

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档