Winforms 面板尺寸

Posted

技术标签:

【中文标题】Winforms 面板尺寸【英文标题】:Winforms Panel Size 【发布时间】:2018-01-16 06:51:29 【问题描述】:

在我的表单中,我有一个 autosize = true 的面板。

面板包含一个 SplitContainer 控件,其中有 2 个水平排列的面板。

顶部面板包含一个datagridview,底部面板包含一个文本框。

有没有一种方法可以以编程方式调整顶部面板的大小,从而根据 datagridview 高度的变化(由行数确定)调整整个 SplitContainer

更新: 我现在可以调整具有 Dock = 底部的 SplitContainer 的大小,但是,即使父面板具有 Autosize = True,父面板的 Layout 事件也不会响应 SplitContainer 控件的高度变化而触发

【问题讨论】:

如果您能包括如何添加新行将会很有帮助! 【参考方案1】:

尝试根据网格的高度设置SplitContainer的分割器距离。

SplitterDistance 获取或设置拆分器从SplitContainer 的左边缘或上边缘的位置(以像素为单位)。

通过https://msdn.microsoft.com/en-us/library/system.windows.forms.splitcontainer.splitterdistance(v=vs.110).aspx

编辑 对我有用的是将SplitContainer 的Dock 设置为None,然后我可以设置SplitContainer 的大小(调用SplitContainer.Height)并让面板自行调整大小以适应SplitContainer。

编辑 2 要允许 SplitContainer 自动调整其宽度,您可以尝试以下操作:

splitContainer.Width = this.ClientRectangle.Width - (splitContainer.Location.X * 2)

This.ClientRectangle.Width 应该获取没有边框的窗口的宽度(如果父级是窗体)。

【讨论】:

我已经尝试过更改 SplitterDistance 但它没有达到我想要的目标,因为我希望调整整个 SplitContainer 的高度,而不仅仅是其中的一个面板。 我已经尝试过更改 SplitterDistance 但它没有达到我想要的目标,因为我希望调整整个 SplitContainer 的高度,而不仅仅是其中的一个面板。 抱歉,我没有意识到您更新了您的回复。我试过这个,但是,它提出了另一个问题,因为我希望 SplitContainer 在我调整表单宽度时自动调整它的宽度。 我删除了我之前的评论,因为我觉得这是一个糟糕的建议。我再次编辑了上面的答案。如果有帮助,请告诉我。 事实证明,即使在 Dock = Bottom 时,我也能够更改 SplitContainer 的高度,因为当我设置 SplitContainer 的高度时,它触发了 SplitContainer 的 SizedChanged 事件,并且 Height 值已更新,但是,即使我将此面板的 Autosize 属性设置为 true,它也不会触发父面板控件的 Layout 事件。【参考方案2】:

出于某种我无法理解的原因,如果我在代码中强制面板大小,则对象的大小会正确。 如果我在 IDE 中定义面板大小为 300x300,稍后会显示更小并且线条不可见。

 public Form1()
    
        InitializeComponent();
        panel1.Size = new Size(300, 300);
    

【讨论】:

以上是关于Winforms 面板尺寸的主要内容,如果未能解决你的问题,请参考以下文章

如何阻止 Winforms 面板滚动?

C# WinForms 面板问题

WinForms:寻找一种简单的方法来弹出“正在处理..”面板

C# WinForms 面板子定位非常不稳定?

winforms - 表单加载期间带有dockstyle填充的用户控件大小不正确

Winforms - 如何在设计器中显示/隐藏元素?