C# winform 控件随窗体放大缩小

前言:

当winform的窗体放大缩小时,希望窗体内的控件可以随着窗体的放大缩小,等比例的也随之改变,一般的想法是根据窗体的改变比例,将控件也等比例放大缩小,这个方法理论上应该可行,但是按比例计算会有精度损失差值,这个随着放大缩小的次数,控件也会发生偏移性改变。我个人认为比较可行的是按整型计算的方式,这样便不会有精度损失差值的问题。

思路:

窗体放大或缩小时,首先需要合计清楚窗体有多少控件需要随着改变

当窗体改变后,此时窗体的长高和原来的长高有一个差值(X,Y)

用X/Y和需要调整的控件数(按长或高数)进行模运算,之后X/Y减去得到的余数值,再除以控件数,求得窗体放大或缩小的调整值N,控件需要调整大小或位置只需要加上N*控件位置值(上至下1~n 或 左至右 1~n,如下图1,2,3)就可以了(放大N为正整数,缩小N为负整数)

原理是窗体一个来回的放大缩小,模运算的余数的绝对值是相等的

案例截图:

放大前:     

放大后:

多次来回放大缩小后:

自己尝试......

案例此功能的代码:

 private void Form1_Resize(object sender, EventArgs e)
        {
            int newX = this.Width - X;     //X是窗体初始的大小
            int newY = this.Height - Y;    //Y是窗体初始的大小
            //int newX2 = newX % 3;    //3是需要放大缩小的控件数,此项目只放大缩小3个chart,其它的则只需要改变位置;
            int newY2 = newY % 3;
            //int newX3 = newX - newX2;
            int newY3 = newY - newY2;
            //int newX4 = newX3 / 3;
            int newY4 = newY3 / 3;

            chartNiu.Width = XNiu + newX;
            chartNiu.Height = YNiu + newY4;
            label6.Top = label6t + newY4;
            //label6.Left = label6l + newY;
            textBoxZhuan.Top = textboxZhuant + newY4;
            //textboxZhuanl = textBoxZhuan.Left;
            label5.Top = label5t + newY4;
            //label5l = label5.Left;
            chartZhuan.Width = XZhuan + newX;
            chartZhuan.Height = YZhuan + newY4;
            chartZhuan.Top = TZhuan + newY4;
            label8.Top = label8t + 2*newY4;
            //label8l = label8.Left;
            textBoxGong.Top = textboxGongt + 2*newY4;
            //textboxGongl = textBoxGong.Left;
            label7.Top = label7t + 2*newY4;
            //label7l = label7.Left;
            chartGong.Width = XGong + newX;
            chartGong.Height = YGong + newY4;
            chartGong.Top = TGong + 2*newY4;
            listBoxMessage.Height = Ylist + 3*newY4;
        }

  • 1
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
回答: 在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 ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值