在C#編程開發中通常會爲了程序的可視化和用戶操作更加便捷,通常會用到winform用戶交互界面的開發。
你可能會問了,C#不是遊戲開發的嘛,怎麼會用交互界面設計呢?其實C#除了遊戲開發,它和Java、C++等語言一樣,能做的事情當然也有很多啦!
今天大灰狼就來使用C#做一個winform的計算器,從而實現對交互界面的簡單開發。
開發winform計算器需要在開發環境的窗體應用程序中進行,並且可以在.cs的設計界面中對進行計算器的簡單設計佈局,
Visual Studio在這一點上的設計十分的方便,我們可以通過設計界面的工具箱直接對界面佈局。
同時在點擊控件之後可以對控件所顯示的文本內容、背景色、前景色、字體大小等屬性進行設置。
值得注意的是,winform中的每一個控件都會關聯一個相關的函數,這些函數的作用就是在點擊該控件時可以觸發的事件,該函數在名稱與控件的名稱相同,同樣可以在控件的屬性欄中進行設置。
之後雙擊該控件就可以在該winform界面的類中自動生成如下所示的控件函數:
Winform計算器要實現的基本控件包括數字、小數點、加減乘除、清空、等於、文本顯示框等控件,同時小夥伴還可以根據需求自行設計和添加其他的功能,以下這個是大灰狼設計的“諾基亞牌大屏獨顯智能計算器”的交互界面,僅供參考了哈。
在交互界面設計完成以後呢,之後就是對各控件函數和其他一些函數的編寫操作了,
首先要做的就是計算器各個控件的函數書寫,這些函數可以直接在Visual Studio中雙擊控件自動生成。這一點是很方便的,可以大大的節省我們對函數的開發編程的時間。
之後我們需要定義一些變量來接收相應的控件觸發時發送的內容,這些變量可以在計算器的使用時接收數字、操作符、小數點、結果等信息:
private string strOutput = ""; //定義輸出
private double INumFormer = 0; //定義輸入的第一個數
private double INumTemp = 0; //定義輸入的第二個數
private double IResult = 0; //定義結果
private string cOperation; //定義操作符
private bool DotCliked = false; //定義布爾類型判斷小數點
double lastPrecisionNum = 1; //定義小數點最後一位的精度爲1
清空函數
這個函數的作用的就是清空已經輸入的所有內容,回到初始交互界面,方便用戶進行二次輸入。清空函數的編寫需要在該控件所關聯的函數下進行。該函數的編寫思路就是直接將之前定義的所有的接收變量置於初始值即可。具體代碼如下:
//清空按鈕觸發函數
private void button_ce_Click(object sender, EventArgs e)
{
//數值變量清空
INumFormer = 0;
INumTemp = 0;
IResult = 0;
strOutput = "";
cOperation = "";
DotCliked = false;
lastPrecisionNum = 1;
txtOutPut.Text = "怎麼又清屏,你是不會算數嘛?";
}
小數點按鈕點擊函數
小數點按鈕點擊函數的作用是在用戶進行double型數據運算時,點擊小數點後對整型數據和浮點型數據進行區分。編寫思路爲首先在輸出內容的字符串後加上小數點,然後在文本框進行顯示,由於我們最開始將判斷小數點的DotCliked變量的初值設置爲了false,因此在進行處理之後,要將DotCliked的值設置爲true,提醒系統此時進行小數運算。具體函數代碼如下:
//小數點按鈕點擊函數
private void button_dot_Click(object sender, EventArgs e)
{
if (!DotCliked)
{
strOutput += ".";
txtOutPut.Text = strOutput;
DotCliked = true;
}
}
集中處理按鈕觸發事件函數
該函數是我們自己定義的函數,而並非是某一個控件自動生成的函數類型,該函數的作用時接收用戶點擊按鈕時觸發的信息,並且進行小數判斷,如果用戶鍵入的數值是小數,則將輸入的數據(點擊小數點後輸入的數據)後移一位,表示小數點後的數值,並將INumTemp數據進行相加,得到輸入的小數,如果不是小數,則值得注意的是,應該將之前輸入的數據乘以10前移一位,
同時給大家一個小小的建議,爲了判斷數據是否溢出,在進行語句判斷的時候可以加上一個異常拋出的判斷,這樣在出現錯誤異常的時候不至於導致程序無法運行,而是發出一個錯誤異常提醒,這樣就會很方便的知道程序的問題所在。
這也是在很多編程開發時的一個習慣所在,很多時候設置異常拋出可以避免程序的錯誤而無法運行。
函數實現代碼具體如下:
//集中處理按鈕觸發事件
private void Numbers_Click(object sender, EventArgs e)
{
string strClickNum = ((Button)sender).Text; //獲取按鈕控件文本
try
{
//判斷如果點擊小數類型
if (DotCliked)
{
lastPrecisionNum *= 0.1;
//得出小數數值,並判斷是否有異常溢出
checked
{
INumTemp = INumTemp + long.Parse(strClickNum) * lastPrecisionNum; //將獲取到的按鈕string型轉化爲long型
}
}
else
{
checked
{
INumTemp = INumTemp * 10 + long.Parse(strClickNum);
}
}
txtOutPut.Text += INumTemp.ToString();
strOutput += strClickNum;
txtOutPut.Text = strOutput;
}
catch (Exception)
{
MessageBox.Show("數據溢出");
}
}
操作符按鈕點擊事件函數
該函數與集中處理觸發事件按鈕函數一樣,也是我們自己定義的函數,該函數的作用是接收加減乘除等控件鍵入時的操作,該函數的編寫思想是,當輸入操作符時,說明上一個數據已經輸入完成了。
這個時候我們需要將INumTemp的值賦給INumFormer表示這是我們鍵入的第一個數據,然後將INumTemp賦值爲0,方便輸入第二個數值時使用,同時將定義輸出的變量在原來的基礎上繼續增加,並通過文本輸出框輸出此時的信息。
之後將小數點判斷變量和小數點位數變量賦值爲初值,方便帶二個數據的輸入。具體的函數實現代碼如下所示:
//操作符按鈕點擊事件
private void Opraters_Click(object sender, EventArgs e)
{
string strClickop = ((Button)sender).Text; //獲取按鈕數值
cOperation = strClickop;
INumFormer = INumTemp;
INumTemp = 0;
strOutput += cOperation.ToString();
txtOutPut.Text = strOutput;
DotCliked = false;
lastPrecisionNum = 1;
}
等號按鈕觸發事件函數
顧名思義,該函數的作用就是將鍵入的結果進行輸出,並且該函數是在雙擊等號控件是自動生成的函數,無需我們再自己定義,當我們點擊等號按鈕時會觸發該函數。
等號按鈕觸發函數的編寫思想是:使用switch語句判斷鍵入的操作符類型,然後根據鍵入不同的操作符對第一次和第二次鍵入的數值INumFormer 和 INumTemp;進行相應的加減乘除運算,並將結果賦值給IResult,並通過文本輸出框輸出運算結果。
接下來有兩種操作方式:
一種是重新鍵入兩個數進行運算,這樣需要將結果輸出以後,將原來定義的所有的變量賦予初值即可,
另一種是得出運算結果之後,繼續點擊操作符進行連環運算,這樣需要在將運算結果輸出之後,將運算結果賦值給INumFormer 和 INumTemp,其目的是爲了存儲運算結果繼續運算。之後再將之前定義的所有變量賦予初值。
等號按鈕觸發函數的具體實現代碼如下:
//等號按鈕觸發函數
private void button_enter_Click(object sender, EventArgs e)
{
try
{
switch (cOperation)
{
case "+":
{
checked //chexked關鍵字檢查是否發生異常溢出
{
IResult = INumFormer + INumTemp;
}
break;
}
case "-":
{
checked //chexked關鍵字檢查是否發生異常溢出
{
IResult = INumFormer - INumTemp;
}
break;
}
case "*":
{
checked //chexked關鍵字檢查是否發生異常溢出
{
IResult = INumFormer * INumTemp;
}
break;
}
case "/":
{
checked //chexked關鍵字檢查是否發生異常溢出
{
IResult = INumFormer / INumTemp;
}
break;
}
case "x2":
{
checked //chexked關鍵字檢查是否發生異常溢出
{
IResult = INumFormer * INumFormer;
}
break;
}
case "x3":
{
checked //chexked關鍵字檢查是否發生異常溢出
{
IResult = INumFormer * INumFormer * INumFormer;
}
break;
}
}
}
catch(Exception)
{
//設置錯誤溢出信息提示框
MessageBox.Show("計算錯誤溢出!");
throw;
}
txtOutPut.Text = IResult.ToString();
txtOutPut.Text += "你猜對不對(๑•ᴗ•๑)";
strOutput = IResult.ToString();
INumFormer = IResult;
INumTemp = IResult;
IResult = 0;
cOperation = "";
DotCliked = false;
lastPrecisionNum = 1;
}
界面控件鍵入設置函數
最後也是最關鍵的一步,就是在用戶交互界面的函數中進行控件的鍵入設置。
該函數是在我們建立交互界面的時候系統自動生成的,
在這裏我們需要使用EventHandler類來分別調用集中處理按鈕函數Numbers_Click和操作符處理按鈕函數Opraters_Click,其目的是爲了我們在通過點擊控件時可以做出相應的響應,不至於我們在單擊控件時做出的無效操作。
該函數的具體實現如下:
public CaleForm()
{
InitializeComponent();
EventHandler en = new EventHandler(Numbers_Click);
button_num0.Click += en;
button_num1.Click += en;
button_num2.Click += en;
button_num3.Click += en;
button_num4.Click += en;
button_num5.Click += en;
button_num6.Click += en;
button_num7.Click += en;
button_num8.Click += en;
button_num9.Click += en;
EventHandler en2 = new EventHandler(Opraters_Click);
button_add.Click += en2; //加
button_sub.Click += en2; //減
button_mul.Click += en2; //乘
button_div.Click += en2; //除
button_square.Click += en2; //平方
button_cube.Click += en2; //立方
}
在這些函數基本完成以後,一個簡易的winform計算器就製作完成了,我們通過直接在窗體中編譯運行,同時小夥伴還可以根據不同的需求添加其他的操作,如平方、立方、根號等運算,其基本思想方法和加減乘除運算相似。
完整源碼下載鏈接
https://download.csdn.net/download/weixin_44985880/12381273
同時也可以關注我的微信公衆號“灰狼洞主”,後臺回覆“winform”計算器獲取下載鏈接!
覺得有用記得關注分享,大灰狼陪你一起進步!