c# winform之小型數學計算器

wisdomone1發表於2012-07-21
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/,如需轉載,請註明出處,否則將追究法律責任。

相關文章