您好,登錄后才能下訂單哦!
小練習:使用winform做一個小型計算器實現基本功能。
思路:首先要弄清楚的是計算器的實現原理,當用戶按下計算器上的鍵計算器會做相應的操作,同時在將反饋信息顯示在一個文本框中。對應于程序中實際上是處理用戶點擊某個按鈕的事件,當用戶點擊了某個按鍵之后,程序會做相應的處理。例:如果用戶點的是數字鍵,會直接在計算器上部的文本框中顯示出來,其他的就相應做一個判斷,上部的文本框是結果的反饋。
注:在處理事件時為了減少程序代碼量,沒必要單獨為每個button處理其點擊事件,例如當用戶按下1-9的數字時,在計算器上部的textbox中就會顯示用戶輸入的數字,可以將這幾個button事件放在一起處理,減少代碼量,具體實現如下:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
//處理用戶點擊數字鍵的事件
button2.Click += new EventHandler(Button_Click);//將 button2.Click關聯到自定義方法Button_Click
button3.Click += Button_Click;//將button3.Click關聯到Button_Click方法
button4.Click += Button_Click;
button5.Click += Button_Click;
button6.Click += Button_Click;
button7.Click += Button_Click;
button8.Click += Button_Click;
button9.Click += Button_Click;
button10.Click += Button_Click;
button11.Click += Button_Click;
//處理用戶點擊運算符的事件
button1.Click += Operator_Click;//將button1.Click事件關聯到Operator_Click方法
button14.Click += Operator_Click;
button15.Click += Operator_Click;
button16.Click += Operator_Click;
}
bool mark = true;//定義一個mark用來判斷什么時候可以可以輸入運算符,比如用戶已經輸了一個運算符,就不能再輸了
///
///自定義的一個方法,當用戶點擊了數字鍵或運算符時將關聯到這個方法,將當前button的文本屬性獲取顯示在textbox中
///
///
接收關聯來的對象
///
private void Button_Click(object sender, EventArgs e)
{
if (textBox1.Text == "0")//如果原來的文本框是0,就將按的button的文本值賦給textBox1.Text
{
textBox1.Text = (sender as Button).Text;
return;//跳出整個Button_Click方法
}
if (!equalmark)//已經做了結果了運算了,這時就清空原來的文本框,等待輸入一個數,否則新輸入的數就會直接拼接在結果后 //面
{
textBox1.Clear();//清空文本框
}
equalmark = true;//表示可以繼續拼接數字了
if (!string.IsNullOrEmpty(operators) && mark)//!string.IsNullOrEmpty(operators)判斷如果operators不為空,即用戶已經點擊過運算符,并且文本框中也有值,表示用戶已經輸入了第一個操作數,并且mark為true,這是就清空文本框,然后將mark置為false可以無限制輸入而不是只能輸一位,這里的mark就是這個作用
{
textBox1.Clear();//清空文本框
mark = false;//將mark置為false,表示可以繼續點擊運算符
}
textBox1.Text += (sender as Button).Text;
}
///
/// 定義一個方法,處理如果點的是運算符所需要做的操作,處理運算符,如果用戶輸入的是運算符,就清空文本框中
/// 的內容,但是在清空之前要保存原來文本框中的內容,為后來做運算用;同時將獲得的運算符賦給textBox1.Text,
/// 同樣清空,因為計算器中運算符是沒有顯示出來的
///
///
///
string str;//定義一個string類型的變量str,獲取用戶點的數字
string operators;//定義一個string類型的變量operators,獲取用戶點的運算符
private void Operator_Click(object sender, EventArgs e)
{
str = textBox1.Text;//獲取用戶輸入的數字賦值給str
operators = (sender as Button).Text;
}
///
/// 用戶按了=之后觸發的事件,根據用戶輸入計算值
///
///
當前對象
///
bool equalmark = true;//定義一個bool類型的equalmark表示用戶
private void button13_Click(object sender, EventArgs e)
{
switch (operators)
{
case "+"://如果用戶按的是+號,處理加法
textBox1.Text =(double.Parse ( str) + double.Parse (textBox1.Text)).ToString ();//textBox1.Text原來存放的是第二次用戶輸入的數字加上原來保存的str最后賦值給textBox1.Text,作為最后的顯示,這里注意賦值不是拼接
break;
case "-":
textBox1.Text = (double.Parse(textBox1.Text)-double.Parse(str) ).ToString();
break;
case "*":
textBox1.Text = (double.Parse(str) * double.Parse(textBox1.Text)).ToString();
break;
case "/":
textBox1.Text = (double.Parse(textBox1.Text)/double.Parse(str)).ToString();
break;
}
//運算完成
operators = "";//將保存運算符的字段置為空
mark = true;//mark置為true表示當已經點過運算符之后可以繼續輸入多位數字
equalmark = false;//equalmark用來實現在輸出的結果后面不能繼續累加數字的作用
}
///
/// 處理用戶按了小數點之后的事件
///
///
///
private void button12_Click(object sender, EventArgs e)
{
if (!textBox1.Text.Contains('.'))
{
if (textBox1.Text == "")//如果原來的文本框包含.并且原來為空,就將里面的文本變為0.
{
textBox1.Text += "0.";
}
else
{
textBox1.Text += ".";//如果原來的文本框不為0,并且不包含.,就把.添加進去
}
}
}
}
}
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。