C#實現日曆樣式的下拉式計算器
本文由碼農網 – 小峰原創翻譯,轉載請看清文末的轉載要求,歡迎參與我們的付費投稿計劃!
本文介紹瞭如何在Visual Studio中建立使用者控制元件來顯示下拉式計算器,彈出效果類似於日曆控制元件。
介紹
如果我們正在做一個類似於庫存控制和計費系統的專案,有些部分可能必須手動計算數值。因此,使用者就不得不使用計算器得到結果,再填入到輸入欄位中,或者在工作視窗上單獨開啟一個計算器視窗。總之,各種不便和麻煩。
這篇文章主要描述的是如何新增下拉式計算器到DataGridView單元格中,如下圖:
使用程式碼
第一步,我們必須先建立一個函式計算器,並且能夠使用控制元件。因此,不妨先建立一個Visual Studio使用者自定義控制元件。怎麼做呢?開啟VS,建立一個新的Windows窗體應用程式(甚至你也可以在你當前的專案中這麼做,但最好能分開,然後結合)。
然後,在Solution Explorer中,右鍵單擊專案,選擇add->User Control。命名(這裡使用“CalculatorControl”),並新增。這時會給你一個像工作空間一樣的Windows窗體。在它上面,用控制元件工具箱中的TextBox
和Button
建立一個計算器的佈局。佈局越小越好(想想日曆控制元件),因為這就是個計算器而已。
為了快速搞定計算器功能,可以點選這裡下載NCal(確保下載二進位制檔案),並新增到專案的引用檔案中。
實現每個數字按鈕的點選事件,將對應的數字輸入/(追加)到文字框中,然後用同樣的方式實現其他按鈕,如+,X,/…並把對應的符號輸入/(追加)到文字框中…
例如在文字框中輸入:2 * 3 + 4
然後使用下面的程式碼來驗證表示式,並得到結果:
// using System.Windows.Forms; using NCalc; // string resText; bool eqPressed; double result; public void btnEqual_Click(object sender, EventArgs e) { Expression ex = new Expression(textBox1.Text); if (ex.HasErrors()) { //Invalid Expression } else { result = Convert.ToDouble(ex.Evaluate()); resText = result.ToString(); } textBox1.Text = resText; text = resText; eqPressed = true; } //
現在計算器功能已經完成。直接構建解決方案,那麼你可能會發現使用者控制元件顯示在工具箱頂部。你可以新增Windows窗體,拖放使用者控制元件到窗體中執行,看看能否正常工作。
然後,在你想要新增下拉式計算器的專案中,建立另一個只有一個小按鈕的使用者控制元件。這個按鈕將被用於開啟計算器。
新增CalculatorControl內建引用檔案到專案中。
建立一個新的繼承ToolStripDropDown
的類:
using System.Windows.Forms; class CalDrop : ToolStripDropDown { Control content; ToolStripControlHost drop; public CalDrop(CalculatorControl content) { this.content = content; this.drop= new System.Windows.Forms.ToolStripControlHost(content); //Add the host to the list this.Items.Add(this.drop); } }
在按鈕的單擊事件中新增以下程式碼:
private void button1_Click(object sender, EventArgs e) { CalculatorControl calculator = new CalculatorControl(); CalDrop cal = new CalDrop(calculator); Point controlLoc = fm.PointToScreen(button1.Location); Point relativeLoc = new Point(controlLoc.X + button1.Width + 100, controlLoc.Y + button1.Height * 2); Rectangle calRect = button1.DisplayRectangle; cal.Show(locPoint); }
新增控制元件到DataGridViewCell
在你構建解決方案時,新的按鈕控制元件會出現在工具箱中。新增以下程式碼到專案的窗體類中。
private CalculatorPick calculator; public form1() { calculator = new CalculatorPick(); calculator.Visible = false; dataGridView2.Controls.Add(calculator); } private void dataGridView2_CellClick(object sender, DataGridViewCellEventArgs e) { if (e.ColumnIndex == clmCommision.Index) { Rectangle calRect = dataGridView2.GetCellDisplayRectangle (e.ColumnIndex, e.RowIndex,false); Point p = calculator.FindForm().PointToClient (calculator.Parent.PointToScreen(calculator.Location)); p.X -= calculator.Width/3; p.Y += calculator.Height; calculator.LocPoint = p; calculator.Width = calRect.Width/3; calculator.Height = calRect.Height; calculator.Visible = true; calculator.Calculator.btnEqual.Click += new EventHandler(calculatorBtnEqlClicked); } else if(calculator!=null) calculator.Visible = false; } void calculatorBtnEqlClicked(object sender, EventArgs e) { dataGridView2.CurrentCell.Value = calculator.Calculator.Result.ToString(); }
興趣點
本技巧描述的是新增控制元件到DataGridView中,可以讓介面顯得更為互動。
許可證
這篇文章中任何相關的原始碼和檔案,都是在The Code Project Open License (CPOL)許可下的。
譯文連結:http://www.codeceo.com/article/csharp-create-a-drop-down-calculator.html
英文原文:Create a Drop Down Calculator Opens like DateTimePicker
翻譯作者:碼農網 – 小峰
[ 轉載必須在正文中標註並保留原文連結、譯文連結和譯者等資訊。]
相關文章
- 縱享絲滑滑動切換的周月日曆,水滴效果,豐富自定義日曆樣式,仿小米日曆(ViewDragHelper實現)View
- 日曆計算
- Flutter初探 上下拉分頁請求+計算器實現Flutter
- 實現彈框的樣式
- element plus 日曆元件預設中文樣式,配置日期週一為周起始日元件
- el-select下拉框樣式修改
- 移動端日曆元件設計與實現元件
- 函式節流實現滑動下拉選單函式
- css樣式常用的樣式以及選擇器CSS
- 淺談分散式計算的開發與實現(一)分散式
- 用java實現日曆demo。Java
- 如何實現特殊的邊框樣式
- C#字尾表示式解析計算字串公式C#字串公式
- 分散式 | DBLE 的 general 日誌實現分散式
- c#計算器C#
- 使用棧實現表示式求值,運用棧計算
- 基於阿里雲函式計算實現AI推理阿里函式AI
- c++虛擬函式實現計算表示式子C++函式
- 大神是怎樣用函式式JavaScript計算陣列平均值的函式JavaScript陣列
- 滿滿乾貨!手把手教你實現基於eTS的分散式計算器分散式
- vue之實現日曆----顯示農曆,滾動日曆監聽年月改變Vue
- php鏈式操作實現四則鏈式運算PHP
- C#實現的下拉多選框,下拉多選樹,多級節點C#
- js實現四則計算(中綴,字尾表示式)JS
- 計算廣告實現入門-索引布林表示式索引
- 根據公曆計算農曆
- 使用RecycleView實現無限滾動的日曆View
- 微信小程式實現簽到的日曆微信小程式
- C#中介面的顯式實現與隱式實現及其相關應用案例C#
- 原生JavaScript實現造日曆輪子JavaScript
- Serverless 實戰 —— 函式計算 + Typescript 實踐Server函式TypeScript
- 利用函式指標,編寫一段簡潔的程式碼,實現計算器的功能函式指標
- verilog實現基於Cordic演算法的雙曲函式計算演算法函式
- 百行以內實現複雜數學表示式計算
- js中windows的函式(隨機數,計時器的實現)JSWindows函式隨機
- 基於正規表示式實現UL下LI的樣式替換功能
- easyExcel多行表頭設定不同樣式和特定單元格設定樣式的實現Excel
- Css實現checkbox及radio樣式自定義CSS
- flutter實現類似優惠券樣式Flutter