number 1

更新时间:2022-12-30 22:59:36 阅读: 评论:0


2022年12月30日发(作者:基数词和序数词)

使⽤C#winform制作⼀个按钮可⾃适应屏幕⼤⼩的简易加减乘

除计算器

⼀:成果物

不多展⽰,,,我们开始吧。。

⼆:窗体包含内容

2.1显⽰屏部分组成

显⽰屏部分由两个组件组成,⼀个是⽅便操作的panel控件位于顶部,且为了使其显⽰屏在改变窗体⼤⼩时⼀直位于顶部,要将其属性设置

为(Dock:TOP)

另外⼀个标签为Label标签将其放置于Panel控件,将其调整⾄合适⼤⼩(将属性AutoSize:Fal),可以为Label和Panel调整合适的

BackColor使其区分开来。可以为Label设置合适的初值(Text)。并且使⽤另⼀种⽅式将此控件固定住,以防⽌窗⼝⼤⼩变化,控件不跟

着变化:锚点(Anchor),将四个⽅向全部选上。

2.2按键的组成部分

下部整个使⽤⼀个Panel(后⾯会使⽤到),Dock:Fill,将下部填充。

⽽后放置16个Button控件,调整合适⼤⼩(可以按住Ctrl拖动来复制控件),并将每个Button的Text设置好对应的值

三:主要代码

3.1按钮⾃适应屏幕⼤⼩

这部分的操作主要针对于多个控件的情况,需要通过编码的形式来控制控件的⼤⼩,为什么不能使⽤Dock属性或者Anchor是属性呢?因

为,Anchor和Dock是针对于整个窗体的固定过程,当窗体放⼤时会同时放⼤。所以需要⽤代码进⾏⼀个⼤⼩控制。

先看代码

intnormalWidth=0;

intnormalHeight=0;

DictionarynormalControl=newDictionary();

privatevoidMainForm_Load(objectnder,EventArg)

{

//记录对象及原始尺⼨

normalWidth=;

normalHeight=;

foreach(ls)

{

(,newRectangle(,,,));

}

}

是在获取当前Panel的宽度(既下部的Panel我将其Name属性更改为了:btnsPanel)

foreach中是在循环btnsPanel中的所有控件,窗体中的控件全部继承于Controls。

并将每个控件的位置和长宽添加⾄字典normalControl中。

privatevoidMainForm_SizeChanged(objectnder,EventArg)

{

//根据原始尺⼨⽐例进⾏新尺⼨的计算

intw=;

inth=;

foreach(ls)

{

intnewX=32((w*1.0)/normalWidth*normalControl[].X);

intnewY=32((h*1.0)/normalHeight*normalControl[].Y);

intnewW=32((w*1.0)/normalWidth*normalControl[].Width);

intnewH=32((h*1.0)/normalHeight*normalControl[].Height);

=newX;

=newY;

=newW;

=newH;

}

}

主要原理是:记录原来按钮与窗体的⽐例⼤⼩,当改变窗体⼤⼩时,按⽐例,等⽐的放⼤或缩⼩按钮的⼤⼩,以达到按钮的⾃适应⼤⼩的

要求。

(新的坐标公式其实就是⼀个等⽐公式的算法,应该都看得懂吧。。。。)

其中有个细节需要注意:关于为什么要*1.0⽽后⼜转换为int类型。

如果不加以变化,w与h为整形整形/浮点型或整形/整形其损失精度会⾮常之⼤如:5/3=1.666=》1损失⾮常之⼤。

所以要先乘1.0使其转换为浮点型进⾏计算,最后使⽤32()

因为这个⽅法是四舍五⼊,如果使⽤(int)强转的话是舍弃末尾数值。

另外:

这两个函数,写在主函数后,页⾯初始化函数后调⽤。

3.2数字部分

privatestring_number1;

publicstringNumber1

{

get{return_number1;}

t

{

_number1=value;

=value;

}

}

privatestring_number2;

publicstringNumber2

{

get{return_number2;}

t

{

_number2=value;

=Number1+Operator+value;

}

}

privatestring_operator;

publicstringOperator

{

get{return_operator;}

t

{

_operator=value;

=Number1+Operator;

}

}

privatevoidbutton1_Click(objectnder,EventArg)

{

//获取触发这个时间的对象

//拿到对象的text属性

Buttonbutton=nderasButton;

stringnumber=;

if(OrEmpty(Operator))

{

if(==".")

{

if(OrEmpty(Number1))

{

1="0";

}

if(f(".")<=0)

{

1+=;

}

}

el

{

1+=;

}

}

}

el

{

if(==".")

{

if(OrEmpty(Number2))

{

2="0";

}

if(f(".")<=0)

{

2+=;

}

}

el

{

2+=;

}

}

}

这⾥写的是⼀个事件,⼀个按钮点击事件。需要将数字按钮和“.”的事件设置为button1_Click

button1_Click中会先判断是否按过了符号键,⽽后判断符号键是否为⼩数点,⼩伙伴⾃⼰代⼊跟着逻辑想⼀下,应该可以想得明⽩。

if(OrEmpty(Number1))

{

1="0";

}

的意义是如果直接按“.”会⾃动补0既0.X

3.3计算部分

privatevoidbutton15_Click(objectnder,EventArg)

{

Buttonbutton=nderasButton;

stringop=;

if(OrEmpty(Operator))

{

or=op;

if(!OrEmpty(Number2))

{

//执⾏计算将值赋给num1

button10_Click(null,null);

}

}

el

{

if(!OrEmpty(Number2))

{

//执⾏计算将值赋给num1

button10_Click(null,null);

}

or=op;

if(!OrEmpty(Number2))

{

//执⾏计算将值赋给num1

button10_Click(null,null);

}

}

}

privatevoidbutton10_Click(objectnder,EventArg)

{

doublen1=(1);

doublen2=(2);

switch(Operator)

{

ca"+":

1=(n1+n2).ToString();

break;

ca"-":

1=(n1-n2).ToString();

break;

ca"*":

1=(n1*n2).ToString();

break;

ca"/":

1=(n1/n2).ToString();

break;

}

or="";

2="";

}

}

按钮{“+”,“-”,“*”,“/”}事件设置为button15_Click

按钮{“=”}事件设置为button10_Click

好了以上就是C#Winform简易计算器的全部内容了

资源下载链接:

欢迎⼩伙伴⼀起讨论交流

本文发布于:2022-12-30 22:59:36,感谢您对本站的认可!

本文链接:http://www.wtabcd.cn/fanwen/fan/90/62166.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

上一篇:领航国际
下一篇:风一样的男子
标签:number 1
相关文章
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图