C#實現日曆樣式的下拉式計算器

2015-08-04    分類:.NET開發、程式設計開發、首頁精華1人評論發表於2015-08-04

本文由碼農網 – 小峰原創翻譯,轉載請看清文末的轉載要求,歡迎參與我們的付費投稿計劃

本文介紹瞭如何在Visual Studio中建立使用者控制元件來顯示下拉式計算器,彈出效果類似於日曆控制元件

介紹

如果我們正在做一個類似於庫存控制和計費系統的專案,有些部分可能必須手動計算數值。因此,使用者就不得不使用計算器得到結果,再填入到輸入欄位中,或者在工作視窗上單獨開啟一個計算器視窗。總之,各種不便和麻煩。

這篇文章主要描述的是如何新增下拉式計算器到DataGridView單元格中,如下圖:

Before Opening the Drop

Drop View

使用程式碼

第一步,我們必須先建立一個函式計算器,並且能夠使用控制元件。因此,不妨先建立一個Visual Studio使用者自定義控制元件。怎麼做呢?開啟VS,建立一個新的Windows窗體應用程式(甚至你也可以在你當前的專案中這麼做,但最好能分開,然後結合)。

然後,在Solution Explorer中,右鍵單擊專案,選擇add->User Control。命名(這裡使用“CalculatorControl”),並新增。這時會給你一個像工作空間一樣的Windows窗體。在它上面,用控制元件工具箱中的TextBoxButton建立一個計算器的佈局。佈局越小越好(想想日曆控制元件),因為這就是個計算器而已。

Calculator Design

為了快速搞定計算器功能,可以點選這裡下載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
翻譯作者:碼農網 – 小峰
轉載必須在正文中標註並保留原文連結、譯文連結和譯者等資訊。]

相關文章