调整表单宽度以匹配 SplitContainer 大小

Posted

技术标签:

【中文标题】调整表单宽度以匹配 SplitContainer 大小【英文标题】:Adjust form width to Match SplitContainer Size 【发布时间】:2017-10-10 08:07:45 【问题描述】:

我在一个表单中有一个SplitContainer,其Dock 属性设置为Fill。SplitPanel1 包含一个图片框,所以当图片框大小减小时,表单的右侧有空格。

如何修剪表单大小以匹配其内容?

我试过了

Myform.Size = Myform.splitContainer1.Size;

来自启动表单。

但这不起作用。我做错了什么?

更新:

截图

设计视图

这是这里的设计视图,您可以看到分屏面板填充了表单。 有 2 个面板。左侧面板包含一个图片框,右侧面板包含另一个面板。

运行时视图

这是运行时视图。您可以看到图片框的大小已减小。我已将拆分容器设置为有边框,并且它占据了完整的窗体

这是我在上面启动表单的主表单背后的代码

myform.endPointPictureBox1.Width = myform.splitContainer1.Panel1.Width/2;
myform.endPointPictureBox1.Height = myform.splitContainer1.Panel1.Height;
myform.endPointPictureBox1.SizeMode = PictureBoxSizeMode.StretchImage;

在第二种形式中,我执行以下加载事件

splitContainer1.SplitterDistance = endPointPictureBox1.Width;
splitContainer1.Width = endPointPictureBox1.Width + splitContainer1.Panel2.Width;
this.Width = splitContainer1.Width;

【问题讨论】:

如果SplitPanel1 中图片框的大小减小,这意味着splitcontainer 的大小会减小吗?即告诉我们更多......你是否使用了 AutoSize 属性? 设置AutoSize = true, AutoSizeMode = AutoSizeMode.GrowAndShrink. @AlexanderPetrov 通过设置表单的属性,正如您所提到的,表单会缩小并且没有控件可见。 @techno 如果你觉得不难请加截图 是什么触发了图片尺寸的缩小?而如果SplitContainer停靠在表单上,​​表单右边怎么会有空白呢?如果SplitContainer 停靠,它应该完全填满表单。还是您在谈论Panel2?您需要向我们展示您在做什么(屏幕截图将是一个好的开始)和/或提供一些表单设置代码,以便我们可以重现它。到目前为止,还不清楚您要做什么。 【参考方案1】:

更新 2

这是您需要执行此操作的代码:

private void button1_Click(object sender, EventArgs e)

    pictureBox1.Image = Image.FromFile(@"c:\Users\Admin\Desktop\tmp.png");
    if(splitContainer1.Orientation== Orientation.Vertical)
    
        var prevWidthPanel2 = splitContainer1.Panel2.Width;
        splitContainer1.SplitterDistance = pictureBox1.Image.Width;
        this.Width = (this.Width - splitContainer1.Panel2.Width) + prevWidthPanel2;
        splitContainer1.SplitterDistance = pictureBox1.Width;
    

我是在单击按钮时执行此操作的,但我认为没有区别。 结果如下:

点击前:

点击后:

【讨论】:

我必须将 pictureBox1.Image.Width; 修改为 pictureBox1.Width 才能正常工作。这适用于图片垂直时..当它水平时 splitpanel2 缩小.. @techno 我已将其设置为 pictureBox1.Image.Width 认为您的 panel1 的宽度必须始终等于图像的宽度,我没有寻找水平大小写,因为问题中没有任何内容 @techno 横写必须有什么行为?? 我的意思是当图片的宽度和高度大致相等时(就像点击之前一样)...... splitpanel2 被图片框覆盖.. @techno 是不是这样 while pictureBox.SizeMode = PictureBoxSizeMode.StretchImage; ??

以上是关于调整表单宽度以匹配 SplitContainer 大小的主要内容,如果未能解决你的问题,请参考以下文章

SplitContainer 面板调整大小问题

SplitContainer - 调整大小时固定面板高度

根据表单大小设置 splitContainer 属性大小 C# WinForms

您如何调整条形宽度以匹配辅助 x 轴?

Winforms 面板尺寸

强制 DataGridView 填充 SplitContainer 中的可用空间