html下拉式日历,C#实现日历样式的下拉式计算器
介绍
如果我们正在做一个类似于库存控制和计费系统的项目,有些部分可能必须手动计算数值。因此,用户就不得不使用计算器得到结果,再填入到输入字段中,或者在工作窗口上单独打开一个计算器窗口。总之,各种不便和麻烦。
这篇文章主要描述的是如何添加下拉式计算器到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#实现日历样式的下拉式计算器相关推荐
- Element UI中el-calendar日历的使用及样式修改(年月可下拉选框选择)
项目场景: 以日历形式展现当前页面.其中,年月可进行下拉选择,默认选中当天日期,用户可以自由点选日期,被选中后日期以紫色显示,鼠标在日历上移动时,日期显示出橙色.有数据的日期显示出灰色. 实现思路:删 ...
- 开发一个出生年份的下拉选择框供用户选择_关于下拉式菜单,这一篇足够了
下拉菜单主要有两种类型: 1.用于导航的下拉菜单: 2.用于表单的下拉菜单. 在本文中,我们将对以下内容进行介绍: 01 结构剖析 下拉菜单的解剖结构与文本输入字段的解剖结构非常相似. 02 下拉菜单 ...
- 监听element-ui的Calendar 日历组件的上一月 今天 下一月
监听element-ui的Calendar 日历组件的上一月 今天 下一月 直接在mounted(){}里面进行监听 代码如下: mounted() {let prevBtn = document.q ...
- odoo12 日历模块_日历-ODOO ERP界面布局与操作说明|ODOO 13教程
odoo使用教程-日历 日历的好处是能集合多个对象的事件,在 Odoo 日历中,你能方便的找到这些活动,包括商机会议.技术研讨.员工大会通知等信息. Odoo 的日历视图不仅能显示任务信息,它还可以提 ...
- sol日历只能在android,手机日历如何实现共享:分别使用苹果日历和SOL日历
为了能更好的践行新梦想<时间效能管理>的课程,共享日历显得尤为重要,以下经我研究,得出共享日历的办法: 在使用日历进行日程管理上面,国外的思维与技术更加优于国内,下面我以苹果手机日历为案例 ...
- php数组日历,PHP 自制日历
PHP 自制日历 一.计算数据 1.new一个Calendar类 2.初始化两个下拉框中的数据,年份与月份 3.初始化要搜索的年份和月份 4.计算得出日历中每一天的数据信息,包括css.天数 复制代码 ...
- C语言编程题显示日历,C语言日历问题
已结贴√ 问题点数:10 回复次数:3 C语言日历问题 我是C语言初学者,在论坛上看到一篇日历程序(我稍微改动了下). 现在显示的月份是1,2...12,怎样能变成显示是Jan,Feb...这样的. ...
- 农历法定日历_木瓜日历安卓版下载-木瓜日历V1.5下载
下周五公司聚餐,不能忘记.女朋友生理期,要提醒她注意身体.木瓜日历app来帮你记录重要日程!专业的日历软件,不用担心错过重要事项,让你的生活更加条理化,添加闹钟提醒,不再忘记! 软件功能 一款简单,有 ...
- 调用Android自带日历功能(日历列表单、添加一个日历事件)
调用Android自带日历功能 觉得这篇文章不错,转载过来. 转载:http://blog.csdn.net/djy1992/article/details/9948393 Android手机配备有 ...
- 基于jQuery日历插件制作日历
这篇文章主要介绍了基于jQuery日历插件制作日历的相关资料,需要的朋友可以参考下 来看下最终效果图吧: 是长得丑了一点,不要吐槽我-.- 首先来说说这个日历主要的制作逻辑吧: ·一个月份最多有31天 ...
最新文章
- I.MX6 PLL5 clock hakcing
- php把数组转为字符串函数,php把数组转为字符串用什么函数
- 如何使用fdisk与parted对不同容量硬盘分区
- led灯条维修_常见的LED透明屏型号规格,影响LED透明屏价格因素
- linux清除history历史命令:history -c
- 转载:CEO如何“养好CIO同时管好CIO”?
- Facebook陷入史上最大危机;华为5G设备欧洲大卖,美国指责欧盟;红帽宣布OpenShift可用于AWS中国……...
- 解读ES6 Promise
- php 转换为自定义类,PHP面向对象教程之自定义类_PHP
- idea搭建maven工程
- 英雄无敌3pc移植android版,英雄无敌3手机版
- 什么是十六进制法_十六进制的定义 十六进制的转换介绍【详解】
- 百度对网站就像西门庆对潘金莲
- 如何把安卓机用出Ipad的自由感 | 安卓党电子手帐
- Spring的下载及目录结构
- 计算机思维使用的方法是,计算机思维
- PYTHON编码转换小记
- win10系统运行sh脚本
- 《SEM运营36计》第7计:无中生有
- 【翻新重写】WWDC 后苹果最新 App Store 审核条款!「内附最新开发者指南」
热门文章
- 好用又免费的办公软件
- mAPI(商户用API) v1.1发布
- Git_GitHub——基本操作、创建远程库、远程库操作、团队协作、SSH免密登录
- 基于php的养生食疗,夏季养生宜吃的8种食物
- 从零开始搭建私人http服务器
- 新形黑猩猩脸部辨识系统 帮助保护朕亨公益组织及时发现网络非法交易
- 用java语言如何编写圆面积_用java语言编写一个圆面积的求法
- 常见英语面试问答_40个常见的工作面试问答
- Transporter提交app到App Store,“正在验证APP-正在通过App Store进行认证...”卡住或很慢的解决方案
- 滴滴出行 DoKit 2.0 - 泛前端开发者的百宝箱