介绍

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

这篇文章主要描述的是如何添加下拉式计算器到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中,可以让界面显得更为互动。

许可证

这篇文章中任何相关的源代码和文件,都是在The Code Project Open License (CPOL)许可下的。

html下拉式日历,C#实现日历样式的下拉式计算器相关推荐

  1. Element UI中el-calendar日历的使用及样式修改(年月可下拉选框选择)

    项目场景: 以日历形式展现当前页面.其中,年月可进行下拉选择,默认选中当天日期,用户可以自由点选日期,被选中后日期以紫色显示,鼠标在日历上移动时,日期显示出橙色.有数据的日期显示出灰色. 实现思路:删 ...

  2. 开发一个出生年份的下拉选择框供用户选择_关于下拉式菜单,这一篇足够了

    下拉菜单主要有两种类型: 1.用于导航的下拉菜单: 2.用于表单的下拉菜单. 在本文中,我们将对以下内容进行介绍: 01 结构剖析 下拉菜单的解剖结构与文本输入字段的解剖结构非常相似. 02 下拉菜单 ...

  3. 监听element-ui的Calendar 日历组件的上一月 今天 下一月

    监听element-ui的Calendar 日历组件的上一月 今天 下一月 直接在mounted(){}里面进行监听 代码如下: mounted() {let prevBtn = document.q ...

  4. odoo12 日历模块_日历-ODOO ERP界面布局与操作说明|ODOO 13教程

    odoo使用教程-日历 日历的好处是能集合多个对象的事件,在 Odoo 日历中,你能方便的找到这些活动,包括商机会议.技术研讨.员工大会通知等信息. Odoo 的日历视图不仅能显示任务信息,它还可以提 ...

  5. sol日历只能在android,手机日历如何实现共享:分别使用苹果日历和SOL日历

    为了能更好的践行新梦想<时间效能管理>的课程,共享日历显得尤为重要,以下经我研究,得出共享日历的办法: 在使用日历进行日程管理上面,国外的思维与技术更加优于国内,下面我以苹果手机日历为案例 ...

  6. php数组日历,PHP 自制日历

    PHP 自制日历 一.计算数据 1.new一个Calendar类 2.初始化两个下拉框中的数据,年份与月份 3.初始化要搜索的年份和月份 4.计算得出日历中每一天的数据信息,包括css.天数 复制代码 ...

  7. C语言编程题显示日历,C语言日历问题

    已结贴√ 问题点数:10 回复次数:3 C语言日历问题 我是C语言初学者,在论坛上看到一篇日历程序(我稍微改动了下). 现在显示的月份是1,2...12,怎样能变成显示是Jan,Feb...这样的. ...

  8. 农历法定日历_木瓜日历安卓版下载-木瓜日历V1.5下载

    下周五公司聚餐,不能忘记.女朋友生理期,要提醒她注意身体.木瓜日历app来帮你记录重要日程!专业的日历软件,不用担心错过重要事项,让你的生活更加条理化,添加闹钟提醒,不再忘记! 软件功能 一款简单,有 ...

  9. 调用Android自带日历功能(日历列表单、添加一个日历事件)

    调用Android自带日历功能  觉得这篇文章不错,转载过来. 转载:http://blog.csdn.net/djy1992/article/details/9948393 Android手机配备有 ...

  10. 基于jQuery日历插件制作日历

    这篇文章主要介绍了基于jQuery日历插件制作日历的相关资料,需要的朋友可以参考下 来看下最终效果图吧: 是长得丑了一点,不要吐槽我-.- 首先来说说这个日历主要的制作逻辑吧: ·一个月份最多有31天 ...

最新文章

  1. I.MX6 PLL5 clock hakcing
  2. php把数组转为字符串函数,php把数组转为字符串用什么函数
  3. 如何使用fdisk与parted对不同容量硬盘分区
  4. led灯条维修_常见的LED透明屏型号规格,影响LED透明屏价格因素
  5. linux清除history历史命令:history -c
  6. 转载:CEO如何“养好CIO同时管好CIO”?
  7. Facebook陷入史上最大危机;华为5G设备欧洲大卖,美国指责欧盟;红帽宣布OpenShift可用于AWS中国……...
  8. 解读ES6 Promise
  9. php 转换为自定义类,PHP面向对象教程之自定义类_PHP
  10. idea搭建maven工程
  11. 英雄无敌3pc移植android版,英雄无敌3手机版
  12. 什么是十六进制法_十六进制的定义 十六进制的转换介绍【详解】
  13. 百度对网站就像西门庆对潘金莲
  14. 如何把安卓机用出Ipad的自由感 | 安卓党电子手帐
  15. Spring的下载及目录结构
  16. 计算机思维使用的方法是,计算机思维
  17. PYTHON编码转换小记
  18. win10系统运行sh脚本
  19. 《SEM运营36计》第7计:无中生有
  20. 【翻新重写】WWDC 后苹果最新 App Store 审核条款!「内附最新开发者指南」

热门文章

  1. 好用又免费的办公软件
  2. mAPI(商户用API) v1.1发布
  3. Git_GitHub——基本操作、创建远程库、远程库操作、团队协作、SSH免密登录
  4. 基于php的养生食疗,夏季养生宜吃的8种食物
  5. 从零开始搭建私人http服务器
  6. 新形黑猩猩脸部辨识系统 帮助保护朕亨公益组织及时发现网络非法交易
  7. 用java语言如何编写圆面积_用java语言编写一个圆面积的求法
  8. 常见英语面试问答_40个常见的工作面试问答
  9. Transporter提交app到App Store,“正在验证APP-正在通过App Store进行认证...”卡住或很慢的解决方案
  10. 滴滴出行 DoKit 2.0 - 泛前端开发者的百宝箱