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:寻找一种简单的方法来弹出“正在处理..”面板