使⽤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;
Dictionary
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小时内删除。
留言与评论(共有 0 条评论) |