关闭 x
IT技术网
    技 采 号
    ITJS.cn - 技术改变世界
    • 实用工具
    • 菜鸟教程
    IT采购网 中国存储网 科技号 CIO智库

    IT技术网

    IT采购网
    • 首页
    • 行业资讯
    • 系统运维
      • 操作系统
        • Windows
        • Linux
        • Mac OS
      • 数据库
        • MySQL
        • Oracle
        • SQL Server
      • 网站建设
    • 人工智能
    • 半导体芯片
    • 笔记本电脑
    • 智能手机
    • 智能汽车
    • 编程语言
    IT技术网 - ITJS.CN
    首页 » .NET »C#实现日历样式的下拉式计算器的代码分享

    C#实现日历样式的下拉式计算器的代码分享

    2015-08-04 00:00:00 出处:小白哥哥的博客
    分享

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

    该篇简介

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

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

    Before Opening the Drop

    Drop View

    使用代码

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

    之后呢,在Solution Explorer中,右键单击项目,选择add->User Control。命名(这里使用“CalculatorControl”),并添加。这时会给你一个像工作空间一样的Windows窗体。在它上面,用控件工具箱中的TextBox和Button创建一个计算器的布局。布局越小越好(想想日历控件),因为这就是个计算器而已。

    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)许可下的。

    上一篇返回首页 下一篇

    声明: 此文观点不代表本站立场;转载务必保留本文链接;版权疑问请联系我们。

    别人在看

    hiberfil.sys文件可以删除吗?了解该文件并手把手教你删除C盘的hiberfil.sys文件

    Window 10和 Windows 11哪个好?答案是:看你自己的需求

    盗版软件成公司里的“隐形炸弹”?老板们的“法务噩梦” 有救了!

    帝国CMS7.5编辑器上传图片取消宽高的三种方法

    帝国cms如何自动生成缩略图的实现方法

    Windows 12即将到来,将彻底改变人机交互

    帝国CMS 7.5忘记登陆账号密码怎么办?可以phpmyadmin中重置管理员密码

    帝国CMS 7.5 后台编辑器换行,修改回车键br换行为p标签

    Windows 11 版本与 Windows 10比较,新功能一览

    Windows 11激活产品密钥收集及专业版激活方法

    IT头条

    智能手机市场风云:iPhone领跑销量榜,华为缺席引争议

    15:43

    大数据算法和“老师傅”经验叠加 智慧化收储粮食尽显“科技范”

    15:17

    严重缩水!NVIDIA将推中国特供RTX 5090 DD:只剩24GB显存

    00:17

    无线路由大厂 TP-Link突然大裁员:补偿N+3

    02:39

    Meta 千万美金招募AI高级人才

    00:22

    技术热点

    微软已修复windows 7/windows 8.1媒体中心严重漏洞 用户可下载安

    卸载MySQL数据库,用rpm如何实现

    windows 7中使用网上银行或支付宝支付时总是打不开支付页面

    一致性哈希算法原理设计

    MySQL数字类型中的三种常用种类

    如何解决SQL Server中传入select语句in范围参数

      友情链接:
    • IT采购网
    • 科技号
    • 中国存储网
    • 存储网
    • 半导体联盟
    • 医疗软件网
    • 软件中国
    • ITbrand
    • 采购中国
    • CIO智库
    • 考研题库
    • 法务网
    • AI工具网
    • 电子芯片网
    • 安全库
    • 隐私保护
    • 版权申明
    • 联系我们
    IT技术网 版权所有 © 2020-2025,京ICP备14047533号-20,Power by OK设计网

    在上方输入关键词后,回车键 开始搜索。Esc键 取消该搜索窗口。