300字范文,内容丰富有趣,生活中的好帮手!
300字范文 > C# winform 控件随窗体放大缩小

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

时间:2021-04-18 19:22:23

相关推荐

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;

}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。