服务器之家:专注于服务器技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - C# - C#日历样式的下拉式计算器实例讲解

C#日历样式的下拉式计算器实例讲解

2021-10-27 11:42C#教程网 C#

如果我们正在做一个类似于库存控制和计费系统的项目,有些部分可能必须手动计算数值。因此,用户就不得不使用计算器得到结果,再填入到输入字段中,或者在工作窗口上单独打开一个计算器窗口。总之,各种不便和麻烦。

本文介绍了如何在visual studio中创建用户控件来显示下拉式计算器,弹出效果类似于日历控件。

介绍

如果我们正在做一个类似于库存控制和计费系统的项目,有些部分可能必须手动计算数值。因此,用户就不得不使用计算器得到结果,再填入到输入字段中,或者在工作窗口上单独打开一个计算器窗口。总之,各种不便和麻烦。

这篇文章主要描述的是如何添加下拉式计算器到datagridview单元格中,如下图:

C#日历样式的下拉式计算器实例讲解

C#日历样式的下拉式计算器实例讲解

使用代码

第一步,我们必须先创建一个函数计算器,并且能够使用控件。因此,不妨先创建一个visual studio用户自定义控件。怎么做呢?打开vs,创建一个新的windows窗体应用程序(甚至你也可以在你当前的项目中这么做,但最好能分开,然后结合)。

然后,在solution explorer中,右键单击项目,选择add->user control。命名(这里使用“calculatorcontrol”),并添加。这时会给你一个像工作空间一样的windows窗体。在它上面,用控件工具箱中的textbox和button创建一个计算器的布局。布局越小越好(想想日历控件),因为这就是个计算器而已。

C#日历样式的下拉式计算器实例讲解

为了快速搞定计算器功能,可以点击这里下载ncal(确保下载二进制文件),并添加到项目的引用文件中。

实现每个数字按钮的点击事件,将对应的数字输入/(追加)到文本框中,然后用同样的方式实现其他按钮,如+,x,/…并把对应的符号输入/(追加)到文本框中…

例如在文本框中输入:2 * 3 + 4

然后使用下面的代码来验证表达式,并得到结果:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
//
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的类:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
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);
    }
}

在按钮的单击事件中添加以下代码:

?
1
2
3
4
5
6
7
8
9
10
11
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

在你构建解决方案时,新的按钮控件会出现在工具箱中。添加以下代码到项目的窗体类中。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
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#VS2012 程序打包部署图文详解

    VS2012 程序打包部署图文详解

    VS2012虽然没有集成打包工具,但它为我们提供了下载的端口,需要我们手动安装一个插件InstallShield。网上有很多第三方的打包工具,但为什么偏要使用微软...

    张信秀7712021-12-15
  • C#如何使用C#将Tensorflow训练的.pb文件用在生产环境详解

    如何使用C#将Tensorflow训练的.pb文件用在生产环境详解

    这篇文章主要给大家介绍了关于如何使用C#将Tensorflow训练的.pb文件用在生产环境的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考借鉴...

    bbird201811792022-03-05
  • C#深入理解C#的数组

    深入理解C#的数组

    本篇文章主要介绍了C#的数组,数组是一种数据结构,详细的介绍了数组的声明和访问等,有兴趣的可以了解一下。...

    佳园9492021-12-10
  • C#C#微信公众号与订阅号接口开发示例代码

    C#微信公众号与订阅号接口开发示例代码

    这篇文章主要介绍了C#微信公众号与订阅号接口开发示例代码,结合实例形式简单分析了C#针对微信接口的调用与处理技巧,需要的朋友可以参考下...

    smartsmile20127762021-11-25
  • C#三十分钟快速掌握C# 6.0知识点

    三十分钟快速掌握C# 6.0知识点

    这篇文章主要介绍了C# 6.0的相关知识点,文中介绍的非常详细,通过这篇文字可以让大家在三十分钟内快速的掌握C# 6.0,需要的朋友可以参考借鉴,下面来...

    雨夜潇湘8272021-12-28
  • C#C#设计模式之Strategy策略模式解决007大破密码危机问题示例

    C#设计模式之Strategy策略模式解决007大破密码危机问题示例

    这篇文章主要介绍了C#设计模式之Strategy策略模式解决007大破密码危机问题,简单描述了策略模式的定义并结合加密解密算法实例分析了C#策略模式的具体使用...

    GhostRider10972022-01-21
  • C#利用C#实现网络爬虫

    利用C#实现网络爬虫

    这篇文章主要介绍了利用C#实现网络爬虫,完整的介绍了C#实现网络爬虫详细过程,感兴趣的小伙伴们可以参考一下...

    C#教程网11852021-11-16
  • C#SQLite在C#中的安装与操作技巧

    SQLite在C#中的安装与操作技巧

    SQLite,是一款轻型的数据库,用于本地的数据储存。其优点有很多,下面通过本文给大家介绍SQLite在C#中的安装与操作技巧,感兴趣的的朋友参考下吧...

    蓝曈魅11162022-01-20