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中,可以让界面显得更为互动,喜欢的朋友就点个赞吧!

(0)

相关推荐

  • c#入门之实现简易存款利息计算器示例

    本想把练习题做了的结果放上来,不过发现附录是有答案的,就算了吧,自己做了没问题就行了哈.之前提到过,要是有朋友有想法,需要做小工具我可以帮忙实现,不过貌似大家都很忙.SO,自己学完第4章后,决定做一个工具:简易存款利息计算器,可以更好地复习前面学过的知识. 原理介绍为啥叫简易呢,因为现在只能计算整存整取(只有1.2.3.5四种年限哈)的利息,并且没有启用自动转存(俗称利滚利,就是把本年和上年的利息之和,作为下年利息计算时的本金)功能,方便和网上已有的工具对比计算结果,判断自己的程序算出来正不正确

  • C#编写的windows计算器的实例代码

    复制代码 代码如下: using System; using System.Drawing; using System.Windows; using System.Windows.Forms; using System.Collections; using System.ComponentModel; using System.Data; namespace comput {     /// <summary>     /// 这是一个计算器的简单实现.     /// </summar

  • C#实现Winform版计算器

    本文实例为大家分享Winform版计算器的具体实现方法,供大家参考,具体内容如下 前台页面设计 后台代码实现 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; namespace 计

  • C#实现简单的计算器功能完整实例

    本文实例讲述了C#实现简单的计算器功能.分享给大家供大家参考,具体如下: using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.Collections; usi

  • C#计算器编写代码

    利用C#编写一个计算器.如下图,能够完成基本的四则运算. 当然这个程序甚至还不上Windows附件那个自带的多功能计算器.  不过这个程序的逻辑还是非常值得思考的,首先你要考虑好用户按+ - * / =等运算符号.数字键之后计算器的状态记录问题.  然后要防止多次按某一个键的问题.比如小数点.就不应该让用户在输入一个数的时候键入两次.  最后,还要弄两个数组,一个存放用户在输入的数字,另一个存放用户输入的符号.  制作过程如下,  1.布局如下,同时可以参考<简单实现C#窗体程序判断是否闰年 >

  • C#实现的简单整数四则运算计算器功能示例

    本文实例讲述了C#实现的简单整数四则运算计算器功能.分享给大家供大家参考,具体如下: 运行效果图如下: 具体代码如下: using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; namespace 计算器 { public pa

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

    本文介绍了如何在Visual Studio中创建用户控件来显示下拉式计算器,弹出效果类似于日历控件. 介绍 如果我们正在做一个类似于库存控制和计费系统的项目,有些部分可能必须手动计算数值.因此,用户就不得不使用计算器得到结果,再填入到输入字段中,或者在工作窗口上单独打开一个计算器窗口.总之,各种不便和麻烦. 这篇文章主要描述的是如何添加下拉式计算器到DataGridView单元格中,如下图: 使用代码 第一步,我们必须先创建一个函数计算器,并且能够使用控件.因此,不妨先创建一个Visual St

  • ASP.NET实现级联下拉框效果实例讲解

    用ASP.NET控件实现部门和员工的联动,参考过程如下 效果图: Default.aspx代码: <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %> <!DOCTYPE html> <html xmlns="http://www.w3.org/199

  • bootstrap里bootstrap动态加载下拉框的实例讲解

    实例如下所示: //引入的包 <!-- bootstrap --> <link rel="stylesheet" type="text/css" href="map/plug-in/scripts/bootstrap/bootstrap.min.css" rel="external nofollow" /> <link rel="stylesheet" type="t

  • JQuery实现级联下拉框效果实例讲解

    用JQuery和select来实现汽车厂商和汽车类型的联动,参考过程如下 效果图: 逻辑分析图: html代码: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml&

  • 如何利用数据库内容建立一个下拉式列表?

    如何利用数据库内容建立一个下拉式列表?<% myDSN="DSN=xur;uid=xur;pwd=xur"mySQL="select * from authors where AU_ID<100"set conntemp=server.createobject("adodb.connection")conntemp.open myDSNset rstemp=conntemp.execute(mySQL)if rstemp.eof th

  • Java Swing中的下拉式菜单(menu)、弹出式菜单(JPopupMenu)、选项卡窗体(JTabbedPane)组件使用案例

    菜单是GUI中最常用的组件,菜单不是Component类的子类,不能放置在普通容器中,不受布局管理器的约束,只能放置在菜单栏中. 菜单组件由菜单栏 (MenuBar).菜单(Menu)和菜单项(MenuItem)三部分组成. 一个菜单栏由若干个菜单组成,一个菜单又由若干个菜单项组成.一般菜单栏放 Frame 窗口中,只要调用 Frame 类的 setMenuBar()方法即可. 常用的菜单有:下拉式菜单和弹出式菜单(独立显示,可出现在任意地方). 一:下拉式菜单的创建步骤: 1.创建一个菜单栏.

  • 用javascript为DropDownList控件下拉式选择添加一个Item至定义索引位置

    用Javascript为DropDownList控件下拉式选择添加一个Item至定义索引位置. 准备数据,创建一个对象,将是存储DropDownList控件每个Item数据. 复制代码 代码如下: Imports Microsoft.VisualBasic Namespace Insus.NET Public Class Catalog Private _ID As Integer Private _Name As String Public Property ID As Integer Get

  • Android巧用ActionBar实现下拉式导航

    本文实例为大家分享了ActionBar下拉式导航的实现代码,供大家参考,具体内容如下 利用Actionbar同样可以很轻松的实现下拉式的导航方式,若想实现这种效果: 1)actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_LIST)  2)setListNavigationCallbacks(SpinnerAdapter adapter,ActionBar.OnNavigationListener callback). 首先是创建一个Fra

  • PyQt5下拉式复选框QComboCheckBox的实例

    笔者在用PyQt5写GUI时碰到了需要使用下拉式复选框的情况,但是PyQt5中没有相应的组件,而网上找到的方法大多是qt使用的,所以不能直接拿来用. 没办法,在这种让人无奈的情况下,笔者只能根据网上大神们的方法试着自己写一个喽. 你还别说,真就让我写出来了.(笔者是个菜鸟新手,所以这小小的成功让我很开心) 然后笔者就很严肃地将这个组件命名为QComboCheckBox,也就是QComboBox和QCheckBox的拼接. 废话不多说,直接先上效果图: 然后是代码:(第一个是基础,第二个是带全选和

  • jquery实现二级导航下拉菜单效果实例

    大家都知道jQuery是一个框架,它对JS进行了封装,使其更方便使用.前面两篇博文分别是用CSS样式和JS实现的,那么这篇就用jQuery来实现二级下拉式菜单. 使用JQuery实现需要用到的知识有: 1)使用$(function(){...})获取到想要作用的HTML元素. 2)通过使用children()方法寻找子元素. 3)通过使用show()方法来显示HTML元素. 4)通过使用hide()方法来隐藏HTML元素. 5)jQuery库引用方法: 第一种方法:将jQuery库下载到电脑上,

随机推荐