C#窗体怎样实现自适应大小?使用布局控件实现窗体的自适应大小(非代码实现)C#WinForm怎样使控件随窗体大小的改变而自动适应?c#的控件摆放怎么在调试之后与最大页面适配?

在习惯了写固定大小的窗体之后总是会遇到界面显示不开的问题,在自己的电脑上运行的好好的,一跑到人家电脑上就动不动少一块显示不开。这哪能行,这以后那帮人用着用着屏幕稍微小点不就得找我调软件,你说咱总不能逼着人家换个显示器吧。

为此我可是煞费苦心,当初年少无知的我可是快要走遍互联网的大街小巷,腿都快累断了。为啥实现都那么复杂哩?

看了好多文章其实现原理几乎都是窗体打开时使用递归遍历所有控件,然后一个一个调尺寸,调位置。天哪,头都大了,就为了那么一个小小的功能给本来就臃肿的项目白白增加了一个类来实现,显得就更臃肿了。况且速度好像也不快(虽然我没测试过<( ̄ˇ ̄)/     不过这不影响我吐槽)。

为此,在一次机缘巧合的情况下,让我偶然发现了两个控件-tableLayoutPanelflowLayoutPanel

前者是列表布局,而后者是流布局。

我实现的窗体自适应就是通过前者——列表布局实现的,话不多说,上图!

由于比较懒,这里就拿公司的Demo做示例啦,可以看到这样一个拉伸后的效果。

接下来就是具体的实现

 

1、首先拖一个tableLayoutPanel到窗体上

2、然后将其Dock属性设置为Fill,也就是中间那个区域

3、选择控件右上角的小三角,编辑行和列,可以在弹出的窗体中设置百分比

4、然后就可以像列表中拖其他控件啦,这时候拖到上面的控件会出现行列坐标和跨度几个属性,我这里让控件在第2行,第1列的位置,行列跨度都是2。需要注意的是同样要设置Dock属性为Fill,这样才可以填满单元格。

5、如果不想要填满,也可以设置它的anchor属性,让它居中对齐

6、这样就实现了控件随窗体大小变化而变化的功能,如果需要自适应屏幕大小,就可以在窗体打开事件中加上下面这段代码。

 这样只需要调整主界面的大小,让主界面调整为屏幕大小,它下面的控件就会按照比例进行缩放。

最后,有两点要注意的地方就是:

1、像我示范的窗体那样有很多groupBox控件的话,是需要用相同的办法在groupBox控件中也加入布局控件进行上面相同的操作,否则就会出现groupBox缩小了,但是groupBox里面的子控件却被覆盖掉而显示不出来的情况。

2、如果想要实现局部放大或缩小,也就是有些地方不希望它改变大小,只希望固定控件去改变大小,如图

可以看出来随着第二张图片的拉长,只改变了操作信息栏和设备版本信息栏的高度,其他部分的大小是没有变化的 

这种情况下只需要前面几行固定像素,让希望变化的控件为百分比大小即可,就像这样

这样,C#窗体就可以随意的拖拉拽,而不用写死大小了,更不用担心放到别人电脑上显示不开的情况了。 到这里为止,软件就已经可以自由托拉拽调整大小啦,如果要实现直接自适应屏幕大小可以这样做(在上述窗体设计操作完成后):

在主窗体构造函数末尾或者主窗体Load事件中写上

this.Width = Screen.PrimaryScreen.WorkingArea.Width;//获取当前屏幕显示区域大小,让窗体长宽等于这个值,这里不包含任务栏哦
this.Height = Screen.PrimaryScreen.WorkingArea.Height;//这样窗体打开的时候直接就是屏幕的大小了

 

  • 46
    点赞
  • 264
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 30
    评论
回答: 在C# WinForm窗体中,如果你想要在表格控件上填充颜色,但是鼠标经过其他控件时整个表格里的数据都变了,可能是因为你在窗体上直接绘制了表格,而没有使用自定义控件来解决这个问题。\[1\] 你可以尝试使用自适应类来解决这个问题。首先,将自适应类的代码复制到你的工程命名空间中,然后声明自适应类的实例。接下来,在窗体上添加SizeChanged事件,并在事件方法中记录窗体控件的初始位置和大小。最后,调用自适应类的自适应方法,完成自适应。这样,你就可以在表格控件上填充颜色而不会受到其他控件的影响了。\[2\] 你还可以使用Panel、DataGridView等控件实现自适应。\[2\] 在窗体代码中,你需要引入System、System.Collections.Generic、System.ComponentModel、System.Drawing和System.Windows.Forms这些命名空间,并在窗体的Load事件中调用自适应类的初始化方法,记录窗体控件的初始位置和大小。然后,在窗体的SizeChanged事件中调用自适应类的自适应方法,完成自适应。\[3\] 这样,你就可以在C# WinForm窗体使用表格控件,并且实现自适应的效果了。 #### 引用[.reference_title] - *1* [C#自定义控件实现窗体绘制表格](https://blog.csdn.net/qq_22955427/article/details/76252582)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [C# WinForm 窗体及其控件自适应](https://blog.csdn.net/chbxgbin/article/details/109690260)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 30
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

jumul

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值