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
翻譯作者:碼農網 – 小峰
[ 轉載必須在正文中標註並保留原文連結、譯文連結和譯者等資訊。]
相關文章
- JavaScript 實現日曆式日期選擇 (轉)JavaScript
- 縱享絲滑滑動切換的周月日曆,水滴效果,豐富自定義日曆樣式,仿小米日曆(ViewDragHelper實現)View
- 日曆計算
- 日曆函式單元 (轉)函式
- 實現彈框的樣式
- Flutter初探 上下拉分頁請求+計算器實現Flutter
- 9 款樣式華麗的 jQuery 日期選擇和日曆控制元件jQuery控制元件
- element plus 日曆元件預設中文樣式,配置日期週一為周起始日元件
- 表示式計算原始碼JAVA實現 (轉)原始碼Java
- 【分散式計算】分散式日誌匯入工具-Flume分散式
- css樣式常用的樣式以及選擇器CSS
- 移動端日曆元件設計與實現元件
- 用java實現日曆demo。Java
- 日曆形式實現解析薦
- 物件~時間篇_日曆的實現物件
- 如何實現特殊的邊框樣式
- 實現透明Dialog樣式的Activity
- 淺談分散式計算的開發與實現(一)分散式
- 淺談分散式計算的開發與實現(1)分散式
- 用RMI實現基於Java的分散式計算(轉)Java分散式
- 函式節流實現滑動下拉選單函式
- C#函式實現的小功能集合C#函式
- C# 利用repeater 的巢狀 實現一個自己想要的 日曆頁面C#巢狀
- 分散式 | DBLE 的 general 日誌實現分散式
- JavaScript獲取元素計算後樣式的封裝JavaScript封裝
- vue之實現日曆----顯示農曆,滾動日曆監聽年月改變Vue
- el-select下拉框樣式修改
- SQLserver自定義樣式主鍵-函式實現篇SQLServer函式
- C#字尾表示式解析計算字串公式C#字串公式
- 微信小程式實現簽到的日曆微信小程式
- java實現一個月的日曆列印Java
- PHP實現的簡單日曆程式碼PHP
- c++虛擬函式實現計算表示式子C++函式
- 計算廣告實現入門-索引布林表示式索引
- 使用棧實現表示式求值,運用棧計算
- 大神是怎樣用函式式JavaScript計算陣列平均值的函式JavaScript陣列
- 滿滿乾貨!手把手教你實現基於eTS的分散式計算器分散式
- c#計算器C#