欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C#日歷樣式的下拉式計算器實例講解

 更新時間:2015年09月24日 16:58:36   投稿:lijiao  
如果我們正在做一個類似于庫存控制和計費系統(tǒng)的項目,有些部分可能必須手動計算數(shù)值。因此,用戶就不得不使用計算器得到結果,再填入到輸入字段中,或者在工作窗口上單獨打開一個計算器窗口。總之,各種不便和麻煩。

本文介紹了如何在Visual Studio中創(chuàng)建用戶控件來顯示下拉式計算器,彈出效果類似于日歷控件。

介紹

如果我們正在做一個類似于庫存控制和計費系統(tǒng)的項目,有些部分可能必須手動計算數(shù)值。因此,用戶就不得不使用計算器得到結果,再填入到輸入字段中,或者在工作窗口上單獨打開一個計算器窗口??傊?,各種不便和麻煩。

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

使用代碼

第一步,我們必須先創(chuàng)建一個函數(shù)計算器,并且能夠使用控件。因此,不妨先創(chuàng)建一個Visual Studio用戶自定義控件。怎么做呢?打開VS,創(chuàng)建一個新的Windows窗體應用程序(甚至你也可以在你當前的項目中這么做,但最好能分開,然后結合)。

然后,在Solution Explorer中,右鍵單擊項目,選擇add->User Control。命名(這里使用“CalculatorControl”),并添加。這時會給你一個像工作空間一樣的Windows窗體。在它上面,用控件工具箱中的TextBox和Button創(chuàng)建一個計算器的布局。布局越小越好(想想日歷控件),因為這就是個計算器而已。

為了快速搞定計算器功能,可以點擊這里下載NCal(確保下載二進制文件),并添加到項目的引用文件中。

實現(xiàn)每個數(shù)字按鈕的點擊事件,將對應的數(shù)字輸入/(追加)到文本框中,然后用同樣的方式實現(xiàn)其他按鈕,如+,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; 
 
    } 
// 

現(xiàn)在計算器功能已經(jīng)完成。直接構建解決方案,那么你可能會發(fā)現(xiàn)用戶控件顯示在工具箱頂部。你可以添加Windows窗體,拖放用戶控件到窗體中運行,看看能否正常工作。

然后,在你想要添加下拉式計算器的項目中,創(chuàng)建另一個只有一個小按鈕的用戶控件。這個按鈕將被用于打開計算器。

添加CalculatorControl內置引用文件到項目中。

創(chuàng)建一個新的繼承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

在你構建解決方案時,新的按鈕控件會出現(xiàn)在工具箱中。添加以下代碼到項目的窗體類中。

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中,可以讓界面顯得更為互動,喜歡的朋友就點個贊吧!

相關文章

  • C# 獲取屬性名的方法

    C# 獲取屬性名的方法

    C# 獲取屬性名的方法實例,需要的朋友可以參考一下
    2013-03-03
  • C#使用FileStream循環(huán)讀取大文件數(shù)據(jù)的方法示例

    C#使用FileStream循環(huán)讀取大文件數(shù)據(jù)的方法示例

    這篇文章主要介紹了C#使用FileStream循環(huán)讀取大文件數(shù)據(jù)的方法,結合實例形式分析了FileStream文件流的形式循環(huán)讀取大文件的相關操作技巧,需要的朋友可以參考下
    2017-05-05
  • C#微信開發(fā)(服務器配置)

    C#微信開發(fā)(服務器配置)

    這篇文章主要介紹了C#微信開發(fā)中有關服務器配置的相關內容,感興趣的小伙伴們可以參考一下
    2015-11-11
  • 利用C#修改Windows操作系統(tǒng)時間

    利用C#修改Windows操作系統(tǒng)時間

    這篇文章主要介紹了利用C#修改Windows操作系統(tǒng)時間,幫助大家更好的利用c#操作系統(tǒng),感興趣的朋友可以了解下
    2020-10-10
  • 深入淺析C#泛型類型

    深入淺析C#泛型類型

    這篇文章主要介紹C#泛型類型,非常不錯,具有參考借鑒價值,需要的朋友可以參考下
    2017-02-02
  • C#實現(xiàn)Winform版計算器

    C#實現(xiàn)Winform版計算器

    這篇文章主要為大家詳細介紹了C#實現(xiàn)Winform版計算器,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-05-05
  • C#使用protobuf-net進行序列化的詳細操作

    C#使用protobuf-net進行序列化的詳細操作

    本文帶領大家學習C#中protobuf-net工具的另一種使用體驗,這個工具的使用體驗屬于Code-First模式,先定義類型,并使用注解進行標記,不需要先編寫.proto文件,感興趣的朋友跟隨小編一起看看吧
    2021-11-11
  • Unity實現(xiàn)簡單換裝系統(tǒng)

    Unity實現(xiàn)簡單換裝系統(tǒng)

    這篇文章主要為大家詳細介紹了Unity實現(xiàn)簡單換裝系統(tǒng),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-04-04
  • Unity3D實現(xiàn)控制攝像機移動

    Unity3D實現(xiàn)控制攝像機移動

    這篇文章主要為大家詳細介紹了Unity3D實現(xiàn)控制攝像機移動 ,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-02-02
  • C#如何遍歷Dictionary

    C#如何遍歷Dictionary

    這篇文章主要為大家詳細介紹了C#遍歷Dictionary的方法,.NET中的Dictionary是鍵/值對的集合,使用起來比較方便,Dictionary也可以用KeyValuePair來迭代遍歷,感興趣的小伙伴們可以參考一下
    2016-04-04

最新評論