getstr88 发表于 2022-6-12 10:39

C# winform中如何支持多个控件都随form自动调整大小,但距离form的pading不同

本帖最后由 getstr88 于 2022-6-12 22:33 编辑

我一直用Unity基于C#开发,unity中锚点很好用,可以自由设置一个控件的上下左右分别距离另一个控件的距离,从而一旦另一个控件大小改变。被设置锚点的控件重新计算自身大小并调整,使得重新满足锚点设定


我想实现,如下图。上面都是panel,其水平大小,都随着form的缩放而改变。但是它俩距离form左右边距不同


如果它俩dock都设为fill,那么调整form的pading,都只能满足1个尺寸,没法让他俩距离form不同


是不是winform本身没有unity那么灵活的设置,我为了实现上面的只能自己监听size变化事件,然后自己计算panel的位置和大小然后赋@?

ziyulx 发表于 2022-6-12 10:55

可以使用TableLayoutPanel,把窗口划分成虚拟单元格,行宽列宽可设置百分比或固定值,窗口resize时会自动调整大小,把控件绑定到对应的单元格,可跨行和列绑定,最好不要在其上再使用过多panel,padding性能会下降

RURUKnight 发表于 2022-6-12 18:29

没有看到图啊,Winform 的窗体内控件有Anchor属性可以锚定父控件的内边缘。如果想锚定其他控件,你大概只能求助代码或布局控件,比如一楼的TableLayoutPanel或FlowLayoutPanel,都会根据设置完成一定的布局。

skypaladin 发表于 2022-6-12 20:23

WPF了解下。

getstr88 发表于 2022-6-12 22:33

RURUKnight 发表于 2022-6-12 18:29
没有看到图啊,Winform 的窗体内控件有Anchor属性可以锚定父控件的内边缘。如果想锚定其他控件,你大概只能 ...

不好意思,补上了图

getstr88 发表于 2022-6-12 22:34

skypaladin 发表于 2022-6-12 20:23
WPF了解下。

客户老项目上开发,这个不能自己定。要是可以,还WPF干啥,直接QT了

getstr88 发表于 2022-6-12 22:35

ziyulx 发表于 2022-6-12 10:55
可以使用TableLayoutPanel,把窗口划分成虚拟单元格,行宽列宽可设置百分比或固定值,窗口resize时会自动调 ...

好的,我研究下

getstr88 发表于 2022-6-13 17:17

ziyulx 发表于 2022-6-12 10:55
可以使用TableLayoutPanel,把窗口划分成虚拟单元格,行宽列宽可设置百分比或固定值,窗口resize时会自动调 ...

我补上图了,好像table layut也没法满足我设置间距的功能。我没找到每个cell能设置自己的pading

ziyulx 发表于 2022-6-14 08:16

getstr88 发表于 2022-6-13 17:17
我补上图了,好像table layut也没法满足我设置间距的功能。我没找到每个cell能设置自己的pading

把控件放到TableLayoutPanel后,会多下面几个属性,用于设置控件所在单元格和跨几个位置,研究一下吧
Column:控件所在的列
ColumnSpan:列的跨度
Row:控件所在的行
RowSpan:列的跨度

getstr88 发表于 2022-6-14 08:35

ziyulx 发表于 2022-6-14 08:16
把控件放到TableLayoutPanel后,会多下面几个属性,用于设置控件所在单元格和跨几个位置,研究一下吧
Co ...

我不是要跨,你看下我发的图就知道和你说的不是一个功能
页: [1] 2
查看完整版本: C# winform中如何支持多个控件都随form自动调整大小,但距离form的pading不同