c#小程序---簡單計算器(拷貝參考)

結果顯示及相關備注:

結果顯示
結果顯示
組件名稱注釋

代碼:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Runtime.InteropServices;
using System.Text;
using System.Windows.Forms;

namespace Calculator
{
    public partial class CalcForm : Form
    {
        private string strOutput = "";
        private double lNumFormer = 0;//前一個操作數(shù)
        private double lNumTemp = 0;//臨時變量
        private double lResult = 0;//結果
        private char cOperator;//操作符
        private bool bDotClicked = false;//用于標記小數(shù)點是否被按下
        //private uint decimalIndex = 0;//用于標記當前小數(shù)點后精度位數(shù)欢际,如3.14的decimalIndex==2
        double lastDecimalNum = 1;//最近一次點擊的小數(shù)精度,即小數(shù)最后一位精度糊识,如0.01

        public CalcForm()
        {
            InitializeComponent();
            //數(shù)字按鈕0~9
            EventHandler eh = new EventHandler(Numbers_Click);
            button_num_0.Click += eh;
            button_num_1.Click += eh;
            button_num_2.Click += eh;
            button_num_3.Click += eh;
            button_num_4.Click += eh;
            button_num_5.Click += eh;
            button_num_6.Click += eh;
            button_num_7.Click += eh;
            button_num_8.Click += eh;
            button_num_9.Click += eh;

            //運算符+惯豆、-迫靖、*、/
            EventHandler eh2 = new EventHandler(Operators_Click);
            button_add.Click += eh2;
            button_sub.Click += eh2;
            button_mul.Click += eh2;
            button_div.Click += eh2;
        }

        private void CalcForm_Load(object sender, EventArgs e)
        {

        }
        //****數(shù)字按鈕0-9
        private void button_num_0_Click(object sender, EventArgs e)
        {
            //功能實現(xiàn)代碼位于Numbers_Click()函數(shù)
        }

        private void button_num_1_Click(object sender, EventArgs e)
        {
            //功能實現(xiàn)代碼位于Numbers_Click()函數(shù)
        }

        private void button_num_2_Click(object sender, EventArgs e)
        {
            //功能實現(xiàn)代碼位于Numbers_Click()函數(shù)
        }

        private void button_num_3_Click(object sender, EventArgs e)
        {
            //功能實現(xiàn)代碼位于Numbers_Click()函數(shù)
        }

        private void button_num_4_Click(object sender, EventArgs e)
        {
            //功能實現(xiàn)代碼位于Numbers_Click()函數(shù)
        }

        private void button_num_5_Click(object sender, EventArgs e)
        {
            //功能實現(xiàn)代碼位于Numbers_Click()函數(shù)
        }

        private void button_num_6_Click(object sender, EventArgs e)
        {
            //功能實現(xiàn)代碼位于Numbers_Click()函數(shù)
        }

        private void button_num_7_Click(object sender, EventArgs e)
        {
            //功能實現(xiàn)代碼位于Numbers_Click()函數(shù)
        }

        private void button_num_8_Click(object sender, EventArgs e)
        {
            //功能實現(xiàn)代碼位于Numbers_Click()函數(shù)
        }

        private void button_num_9_Click(object sender, EventArgs e)
        {
            //功能實現(xiàn)代碼位于Numbers_Click()函數(shù)
        }

        //****操作符+、-背桐、*、/
        private void button_add_Click(object sender, EventArgs e)
        {
            //功能實現(xiàn)代碼位于Operators_Click()函數(shù)
        }

        private void button_sub_Click(object sender, EventArgs e)
        {
            //功能實現(xiàn)代碼位于Operators_Click()函數(shù)
        }

        private void button_mul_Click(object sender, EventArgs e)
        {
            //功能實現(xiàn)代碼位于Operators_Click()函數(shù)
        }

        private void button_div_Click(object sender, EventArgs e)
        {
            //功能實現(xiàn)代碼位于Operators_Click()函數(shù)
        }


        //****等于號=
        private void button_enter_Click(object sender, EventArgs e)
        {
            try
            {
                switch (cOperator)
                {
                    case '+':
                        //計算并檢測數(shù)據(jù)是否越界
                        checked { lResult = lNumFormer + lNumTemp; }
                        break;
                    case '-':
                        checked { lResult = lNumFormer - lNumTemp; }
                        break;
                    case '*':
                        checked { lResult = lNumFormer * lNumTemp; };
                        break;
                    case '/':
                        checked { lResult = lNumFormer / lNumTemp; };
                        break;
                }
            }
            catch
            {
                MessageBox.Show("運算結果溢出");
            }

            txtOutput.Text = lResult.ToString();
            //清空變量
            lNumFormer = 0;//前一個操作數(shù)
            lNumTemp = 0;//臨時變量
            lResult = 0;//結果
            cOperator = '\0';//操作符
            strOutput = "";
            bDotClicked = false;
            lastDecimalNum = 1;
        }

        //****清空鍵CE
        private void button_ce_Click(object sender, EventArgs e)
        {
            //清空變量
            lNumFormer = 0;//前一個操作數(shù)
            lNumTemp = 0;//臨時變量
            lResult = 0;//結果
            cOperator = '\0';//操作符
            strOutput = "";
            bDotClicked = false;
            lastDecimalNum = 1;

            //清空頁面顯示
            txtOutput.Text = "";
        }

        //****小數(shù)點.
        private void button_dot_Click(object sender, EventArgs e)
        {
            if (!bDotClicked)
            {
                strOutput += ".";
                txtOutput.Text = strOutput;
                bDotClicked = true;
            }
        }

        //集中處理按鈕點擊事件
        //****數(shù)字按鈕0-9
        private void Numbers_Click(object sender, EventArgs e)
        {
            string strClickNum = ((Button)sender).Text;
            try
            {
                if (bDotClicked)
                {
                    //得出點擊的小數(shù)數(shù)值
                    //decimalIndex++;
                    lastDecimalNum *= 0.1;
                    checked { lNumTemp = lNumTemp + long.Parse(strClickNum) * lastDecimalNum; }
                }
                else
                {
                    checked { lNumTemp = lNumTemp * 10 + long.Parse(strClickNum); }
                }
            }
            catch
            {
                //貌似double型并不會輕易溢出
                MessageBox.Show("數(shù)據(jù)溢出");
            }
            txtOutput.Text = lNumTemp.ToString();
            strOutput += strClickNum;
            //strOutput = lNumTemp.ToString();
            txtOutput.Text = strOutput;
        }

        //集中處理按鈕點擊事件
        //****操作符+蝉揍、-链峭、*、/
        private void Operators_Click(object sender, EventArgs e)
        {
            string strClickOp = ((Button)sender).Text;
            cOperator = strClickOp[0];//strClickOp長度為1
            lNumFormer = lNumTemp;
            lNumTemp = 0;
            strOutput += cOperator.ToString();
            txtOutput.Text = strOutput;
            bDotClicked = false;
            lastDecimalNum = 1;
        }

        //鍵盤按鍵
        protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
        {
            // if it is a hotkey, return true; otherwise, return false
            switch (keyData)
            {
                case Keys.NumPad0:
                    button_num_0.Focus();
                    button_num_0.PerformClick();
                    return true;
                case Keys.NumPad1:
                    button_num_1.Focus();
                    button_num_1.PerformClick();
                    return true;
                case Keys.NumPad2:
                    button_num_2.Focus();
                    button_num_2.PerformClick();
                    return true;
                case Keys.NumPad3:
                    button_num_3.Focus();
                    button_num_3.PerformClick();
                    return true;
                case Keys.NumPad4:
                    button_num_4.Focus();
                    button_num_4.PerformClick();
                    return true;
                case Keys.NumPad5:
                    button_num_5.Focus();
                    button_num_5.PerformClick();
                    return true;
                case Keys.NumPad6:
                    button_num_6.Focus();
                    button_num_6.PerformClick();
                    return true;
                case Keys.NumPad7:
                    button_num_7.Focus();
                    button_num_7.PerformClick();
                    return true;
                case Keys.NumPad8:
                    button_num_8.Focus();
                    button_num_8.PerformClick();
                    return true;
                case Keys.NumPad9:
                    button_num_9.Focus();
                    button_num_9.PerformClick();
                    return true;
                case Keys.Add:
                    button_add.Focus();
                    button_add.PerformClick();
                    return true;
                case Keys.Subtract:
                    button_sub.Focus();
                    button_sub.PerformClick();
                    return true;
                case Keys.Multiply:
                    button_mul.Focus();
                    button_mul.PerformClick();
                    return true;
                case Keys.Divide:
                    button_div.Focus();
                    button_div.PerformClick();
                    return true;
                case Keys.Enter:
                    button_enter.Focus();
                    button_enter.PerformClick();
                    return true;
                case Keys.Escape:
                    button_ce.Focus();
                    button_ce.PerformClick();
                    return true;
                case Keys.Decimal:
                    button_dot.Focus();
                    button_dot.PerformClick();
                    return true;
                default:
                    break;
            }
            return base.ProcessCmdKey(ref msg, keyData);
        }

        private void txtOutput_TextChanged(object sender, EventArgs e)
        {

        }
    }
}


聯(lián)系方式

個人微信

公眾號_DotNet微說.jpg
最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末又沾,一起剝皮案震驚了整個濱河市弊仪,隨后出現(xiàn)的幾起案子熙卡,更是在濱河造成了極大的恐慌,老刑警劉巖励饵,帶你破解...
    沈念sama閱讀 206,602評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件驳癌,死亡現(xiàn)場離奇詭異,居然都是意外死亡役听,警方通過查閱死者的電腦和手機颓鲜,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,442評論 2 382
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來典予,“玉大人甜滨,你說我怎么就攤上這事×鲂洌” “怎么了衣摩?”我有些...
    開封第一講書人閱讀 152,878評論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長孽椰。 經(jīng)常有香客問我昭娩,道長,這世上最難降的妖魔是什么黍匾? 我笑而不...
    開封第一講書人閱讀 55,306評論 1 279
  • 正文 為了忘掉前任栏渺,我火速辦了婚禮,結果婚禮上锐涯,老公的妹妹穿的比我還像新娘磕诊。我一直安慰自己,他們只是感情好纹腌,可當我...
    茶點故事閱讀 64,330評論 5 373
  • 文/花漫 我一把揭開白布霎终。 她就那樣靜靜地躺著,像睡著了一般升薯。 火紅的嫁衣襯著肌膚如雪莱褒。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,071評論 1 285
  • 那天涎劈,我揣著相機與錄音广凸,去河邊找鬼。 笑死蛛枚,一個胖子當著我的面吹牛谅海,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播蹦浦,決...
    沈念sama閱讀 38,382評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼扭吁,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起侥袜,我...
    開封第一講書人閱讀 37,006評論 0 259
  • 序言:老撾萬榮一對情侶失蹤蝌诡,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后系馆,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體送漠,經(jīng)...
    沈念sama閱讀 43,512評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,965評論 2 325
  • 正文 我和宋清朗相戀三年由蘑,在試婚紗的時候發(fā)現(xiàn)自己被綠了闽寡。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,094評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡尼酿,死狀恐怖爷狈,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情裳擎,我是刑警寧澤涎永,帶...
    沈念sama閱讀 33,732評論 4 323
  • 正文 年R本政府宣布,位于F島的核電站鹿响,受9級特大地震影響羡微,放射性物質發(fā)生泄漏。R本人自食惡果不足惜惶我,卻給世界環(huán)境...
    茶點故事閱讀 39,283評論 3 307
  • 文/蒙蒙 一妈倔、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧绸贡,春花似錦盯蝴、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,286評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至尿瞭,卻和暖如春闽烙,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背声搁。 一陣腳步聲響...
    開封第一講書人閱讀 31,512評論 1 262
  • 我被黑心中介騙來泰國打工黑竞, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人酥艳。 一個月前我還...
    沈念sama閱讀 45,536評論 2 354
  • 正文 我出身青樓,卻偏偏與公主長得像爬骤,于是被迫代替她去往敵國和親充石。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 42,828評論 2 345

推薦閱讀更多精彩內(nèi)容