ITPub博客

首页 > Linux操作系统 > Linux操作系统 > c# winform之小型数学计算器

c# winform之小型数学计算器

原创 Linux操作系统 作者:wisdomone1 时间:2012-07-21 23:22:22 0 删除 编辑
using System;
using System.Collections.Generic;
using System.Windows.Forms;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Collections;
namespace WindowsApplication1
{
    //手工编写winform
     class test:Form
     {
         //1,引用calcbutton类
         //2,根据上述类的不同实例,调用onkeypress方法事件

         //3,组建4个calcbutton按钮,根据其文本的不同,

         private int isum = 0;
         private Button iresultbutton;
        
        public test()
        {
            //再次证明自己的三维空间思维很久缺,难怪高中立体几何成绩一般,所以同学们,一定要好好学习数学,于编程太重要了.

            //如下编到一半处,一调试,发现四个按钮全挤在一起了,什么意思呢,就是按钮之间的坐标搞乱了,还有一定要知道每个按钮最好有个间隙,不然全接在一起,区别开来不明显了
            //所以我理解到思路很知道,在作什么事前先把思路理清,打算作什么,实现什么功能,如何实现,这些实现之间的关系是什么;这样再作可能比一下子上手作好些

            new calcbutton(this, "1", '1', 8, 24, 20, 20);//在此为何只要构造函数,连变量都没有了,这就是下面独立定义类calcbutton的作用,直接把此按钮实例添加test窗体中了
            new calcbutton(this, "2", '2', 50, 24, 20, 20);//y坐标递增16变为40,下面同理;即这些按钮皆在同一个垂直线上
            new calcbutton(this, "3", '3', 8, 50, 20, 20);//在此理解到一点,每个按钮的左上角坐标 (x,y)和理解的大小,另外为了按钮间隔,要坐标+按钮大小+另外一些大小,这样按钮才有间隙
            new calcbutton(this, "4", '4', 50, 50, 20, 20);//


            iresultbutton = new Button();
            //b1.Size = new Size(50, 50);
            iresultbutton.Parent = this;
            iresultbutton.Anchor = AnchorStyles.Right;//此指的是移动,所以anchor是在窗体变动时才起它的作用,与onresize方法类比,哈哈
            

            //继续分析 添加按钮,就要实现功能,按字符1,第一个加数是1,其它同理;你要把每次运算的结果存储起来,所以要一个字段

            //这样就把这些按钮添加到事件处理方法

            //继续分析,这些按钮与onkeypress如何关系呢,这样就要把办法把control.click与control.onkeypress联系起来
            foreach (Button bt in Controls)
                bt.KeyPress += new KeyPressEventHandler(keypress1);
            
            
        }
        ///
        /// 应用程序的主入口点。
        ///
        [STAThread]
        static void Main()
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Application.Run(new test());
        }
         //在此中判断点的到底是哪个按钮,哈哈,把此按钮的文本取出来,累加起来,然后返回累计值,要有判断,因为是4个不同的按钮,哈哈
         private void buttonclick(object sender,EventArgs e)
         {
             InvokeOnClick((Control)sender, e) ;//invokeonclick引发指定控件click事件方法,经分析,哪个方法调用它,进而去调用buttononclick方法,如何调用, 不用它可以吗,直接调用control.click行吗,先试下

             calcbutton calc = (calcbutton)sender;//这样的话,经编写和分析,没办法从键 盘按键得知到底按的哪个键,只有onkeypress事件方法可以,那么不用buttononclick只用onkeypress可以吗,继续分析
             //OnKeyPress(e);

         }

         //按键事件,获到哪个calcbutton按下,得到keychar
         private void keypress1(object sender, KeyPressEventArgs e)
    {
              
             switch (e.KeyChar)
             {
                 case '1': isum += 1; iresultbutton.Text = isum.ToString(); ; break;
                 case '2': isum += 2; iresultbutton.Text = isum.ToString(); break;
                 case '3': isum += 3; iresultbutton.Text = isum.ToString(); break;
                 case '4': isum += 4; iresultbutton.Text = isum.ToString(); break;
             }
         }
         
     }

    //这要里就要对按钮类进行二次封装,为何呢,因为要对这些按钮以其上不同的文本进行触发不同的操作,而且为了模拟键 盘操作,且禁用鼠标触发,把此功能封装于此按钮类中
    //把此按钮与form类连接起来,即form是它的父容器,且把此按钮的文本与文本对应的按键文字包含在此类中,还要此按钮的大小即位置,因为在窗体上有多个按钮哟
    public class calcbutton : Button
    {
       private char keychar1;
       public calcbutton(Control parent, string strtext, char keychar, int x, int y, int cx, int cy)
       {
           Parent = parent;//把按钮添加到窗体中,因为要在窗体类中引用此按钮封装类,此处parent方法参数对应窗体
           Text = strtext;
           keychar1 = keychar;
           Location = new Point(x, y);//二合一,转换思想,我刚开始不会写这里,我的理解是一个参数对应一个参数,而此处可以是=左边或=右边为一或二两个参数,所以编程一定要编写,不能只看,梳理思路
           Size = new Size(cx, cy);//这个道理同上,就变聪明了哈哈
           SetStyle(ControlStyles.Selectable, false);//体会两点,一是control抽象类非常重要,在此就是个很重要的用处;setstyle是类control.setstyle(样式,是否启用样式);设置为false,禁用鼠标触发,只启动键盘
           
       }
    }
 }

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/9240380/viewspace-736264/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
提供针对oracle初学者及进阶的数据库培训,欢迎大家咨询: 微信: wisdomone 微信公众号: lovedb qq: 305076427 微博: wisdomone9

注册时间:2008-04-04

  • 博文量
    2164
  • 访问量
    11697253