科百科
当前位置: 首页 范文大全

winform实例大全(WinForm应用实战开发指南)

时间:2023-07-10 作者: 小编 阅读量: 2 栏目名: 范文大全

由于项目的需要,需要在项目的Winform系统的一个模块中集成手写签名的功能,一开始对这块不是很了解,只是了解他能够替代鼠标进行签名。保存也是记录PictureBox对象的大小宽度,把图片存储到图片对象里面,供控件使用。以上的医生签名,我们触发的操作就是弹出一个签名窗体,在其中绘制签名,确认后返回,并把图片进行显示在详细信息窗体里面。

由于项目的需要,需要在项目的Winform系统的一个模块中集成手写签名的功能,一开始对这块不是很了解,只是了解他能够替代鼠标进行签名。既然是签名,一般就是需要记录手稿图片,作为一个记录核实的凭证,因为有效的签名是很难模拟的。市场上也存在很多类型的电子签名笔,一时间还真不知道那种适合。

WinForm应用的界面开发有个很好用的界面控件推荐——DevExpress WinForm,拥有180 组件和UI库,能为Windows Forms平台创建具有影响力的业务解决方案,点击下方按钮链接可直接获取产品体验!

DevExpress WinForms Subscription官方最新版免费下载试用,历史版本下载,在线文档和帮助文件下载-慧都网

1. 电子手写签名介绍

电子手写签名,其实就是模拟真实的笔进行签名的过程,我这里主要是介绍使用外部设备来记录手稿图片的需求,这样其实就是类似于把我们真实在纸张上的签名内容,放到了电脑记录面板上进行操作了,而这个操作模拟,其实就是利用了类似鼠标功能的接触笔来实现的。

有些笔是在纸上或者电脑屏幕上进行模拟签名,通过一个接收器方式接受笔的接触信号,一般要先设定纸张或者屏幕的范围,然后进行签名书写。

由于签名笔淘宝上也有很多,开始淘到的就是类似这种,不过效果不理想,好像总是定位不准,而且和鼠标发生严重冲突,基本上操作不了,商家客服说很少有这种现象发生,但是却发生在我身上,于是只有退货。然后淘到的是一款汉王手写板笔,开始用的还可以,其实就是代替了鼠标进行操作,试过可以后,就搁置起来。

一直用鼠标模拟签名进行开发,写该篇随笔的时候,本来想用来展示下效果,可惜又用不了,不知道什么原因。

做签名功能开发的时候,其实我是不关注手写笔功能的,因为我想其实如果鼠标能操作就可以,手写笔其实也就应该可以操作。因此只需要在输入的地方记录鼠标操作的痕迹,类似手写签名的效果即可,大概如下所示。

2. 手写签名的实现

从上图可以看到,只需要提供一个类似绘图的面板即可记录鼠标的轨迹,也就是功能有点类似Windows自带的白板(或者绘图板)软件即可。

其实要模拟鼠标签名的效果,只需要利用功能强大的GraphicsPath对象就差不多了,剩下的就是记录点和绘制点,设置绘图笔的宽度和颜色等方面。下面我们看看具体的实现代码吧。

首先要申明几个必要的对象,来承载相关的信息。

//记录直线或者曲线的对象private System.Drawing.Drawing2D.GraphicsPath mousePath = new System.Drawing.Drawing2D.GraphicsPath();//画笔透明度private int myAlpha = 100;//画笔颜色对象private Color myUserColor = new Color();//画笔宽度private int myPenWidth = 3;//签名的图片对象public Bitmap SavedBitmap;

从上图效果图上,我们看到,我们在其中放置了一个绘图面板,其实就是一个PictureBox对象而已,我们只需要在PictureBox对象,记录鼠标的移动、鼠标按下,以及对象刷新操作事件即可实现模拟签名的效果了,如下代码所示。

private void pictureBox1_MouseMove(object sender, MouseEventArgs e){if (e.Button == System.Windows.Forms.MouseButtons.Left){try{mousePath.AddLine(e.X, e.Y, e.X, e.Y);}catch (Exception ex){MessageBox.Show(ex.Message);}}pictureBox1.Invalidate();}private void pictureBox1_MouseDown(object sender, MouseEventArgs e){if (e.Button == System.Windows.Forms.MouseButtons.Left){mousePath.StartFigure();}}private void pictureBox1_Paint(object sender, PaintEventArgs e){try{myUserColor = System.Drawing.Color.Blue;myAlpha = 255;Pen CurrentPen = new Pen(Color.FromArgb(myAlpha, myUserColor), myPenWidth);e.Graphics.DrawPath(CurrentPen, mousePath);}catch { }}

保存及清空操作,其实很简单,清空的时候,记得把绘图面板清空,并重置路径对象即可。保存也是记录PictureBox对象的大小宽度,把图片存储到图片对象里面,供控件使用。

具体实现如下所示。

private void btnClear_Click(object sender, EventArgs e){pictureBox1.CreateGraphics().Clear(Color.White);mousePath.Reset();}private void btnSave_Click(object sender, EventArgs e){SavedBitmap = new Bitmap(pictureBox1.Width, pictureBox1.Height);pictureBox1.DrawToBitmap(SavedBitmap, new Rectangle(0, 0, pictureBox1.Width, pictureBox1.Height));this.DialogResult = System.Windows.Forms.DialogResult.OK;}

上面实现还不能完成一个最终的签名效果,有时候,我们需要把这些图片放到数据库里面,如果是把上面的操作的图片记录下来,发现很大,一般我们签名的效果显示,不会很大,一方面只需要辨认其笔迹即可,另外一方面也不会过于增大数据库的存储空间。那么我们就需要对图片大小进行一定的处理了。其实可能在详细信息里面,我们就这样记录显示即可。那么就一定要裁剪图片的大小。

以上的医生签名,我们触发的操作就是弹出一个签名窗体,在其中绘制签名,确认后返回,并把图片进行显示在详细信息窗体里面。

private void btnDoctorSign_Click(object sender, EventArgs e){FrmSignicture dlg = new FrmSignicture();if (dlg.ShowDialog() == System.Windows.Forms.DialogResult.OK){this.picDoctor.Image = dlg.SavedBitmap;}}

为了安装最终显示的PictureBox的大小保存图片,我们需要裁减,裁减就是重新根据图片大小进行保存Bitmap对象,这种可以从全屏最初的几M缩小到十几K,方便存储。

至于图片对象存储到数据库,这个由于利用了我Winform开发框架里面的数据库基础对象,基本上不需要特别对待及处理,只需要把图片字段的Byte数组获得即可了。这里就不在赘述Winform开发框架的功能及相关的基类处理了。

public Bitmap SaveImage(PictureBox pictureBox1){Bitmap SavedBitmap = new Bitmap(pictureBox1.Width, pictureBox1.Height);pictureBox1.DrawToBitmap(SavedBitmap, new Rectangle(0, 0, pictureBox1.Width, pictureBox1.Height));return SavedBitmap;}

最后,有时候,签名还需要在列表里面显示,这样方便对一些关键信息进行查看核对。如下图所示:

那么对于列表中显示图片,我们在DevExpress界面的分页控件中应该如何处理呢,这估计也是DevExpress开发中很多常见问题之一?

其实也很简单,就是在DataSourceChanged 变化的事件中改变单元格的对象属性即可。

this.winGridViewPager1.OnRefresh= new EventHandler(winGridViewPager1_OnRefresh);this.winGridViewPager1.ShowLineNumber = true;this.winGridViewPager1.gridView1.Appearance.Row.TextOptions.HAlignment = DevExpress.Utils.HorzAlignment.Center;this.winGridViewPager1.gridView1.Appearance.HeaderPanel.TextOptions.HAlignment = DevExpress.Utils.HorzAlignment.Center;this.winGridViewPager1.AppendedMenu = this.contextMenuStrip1;this.winGridViewPager1.gridView1.DataSourceChanged= new EventHandler(gridView1_DataSourceChanged);this.winGridViewPager1.gridView1.RowHeight = 44;void gridView1_DataSourceChanged(object sender, EventArgs e){RepositoryItemPictureEdit pic1 = new RepositoryItemPictureEdit();pic1.SizeMode = DevExpress.XtraEditors.Controls.PictureSizeMode.Zoom;pic1.NullText = " ";pic1.CustomHeight = 44;pic1.BestFitWidth = 100;this.winGridViewPager1.gridView1.Columns["Signature"].ColumnEdit = picFlight;this.winGridViewPager1.gridView1.Columns["Signature"].MaxWidth = 100;this.winGridViewPager1.gridView1.Columns["Signature"].MinWidth = 100;RepositoryItemPictureEdit picDoctor = new RepositoryItemPictureEdit();picDoctor.SizeMode = DevExpress.XtraEditors.Controls.PictureSizeMode.Zoom;picDoctor.NullText = " ";picDoctor.CustomHeight = 44;picDoctor.BestFitWidth = 100;this.winGridViewPager1.gridView1.Columns["DoctorSignature"].ColumnEdit = picDoctor;this.winGridViewPager1.gridView1.Columns["DoctorSignature"].MaxWidth = 100;this.winGridViewPager1.gridView1.Columns["DoctorSignature"].MinWidth = 100;}

以上就基本上解决了,签名,以及图片保存,以及列表显示图片效果的问题了。

本文转载自:博客园 - 伍华聪

    推荐阅读
  • 孩子晚睡的危害(孩子晚睡的危害有多大?后悔现在才知道)

    所以放任孩子晚睡或睡眠习惯不良,等同是为孩子埋下心血管疾病的种子,将来到三十五岁以后,这一埋藏的祸因就会爆发成为心血管疾病。健康原则2:要督促孩子早睡,首先得自己生活得法。大人之所以无法督促孩子早睡,多半有几种原因。人体健康的良好运作,有赖于七岁前打下的稳固基础。而参与这一切活动的最重要器官就是肝脏。能够在这一时间段入眠,才能算是“早睡”。

  • 砂糖橘的白丝可以吃吗(砂糖橘的白丝能不能吃)

    砂糖橘的白丝也被称为橘络,是砂糖橘果皮内层的筋络,虽然吃起来口感比较粗糙,且带有一定的苦味,但其中并不含有毒性物质,所以平时在吃砂糖橘的时候是可以一起吃的。砂糖橘的白丝中含有较多的纤维素,食用后不仅可以促进人体肠胃的蠕动,帮助食物进行消化和吸收,而且还能吸收肠道内的水分,增加粪便的体积,从而可以起到润肠通便的作用。

  • 泔水是什么意思(泔水发酵方法)

    泔水是什么意思泔水,英文是swill,hogwash,又称潲水或馊水,指饭馆、家庭在吃完饭后把剩下的饭菜之类倒在一起混合的剩饭菜。最好不乱扔泔水,对环境造成极大的危害。泔水是人类生活过程中使用剩下的饮食废弃物。目前最为合理有效的泔水回收利用途径是通过收集泔水并进行微生物处理。配好料后,按说明要求密封发酵一至三天。

  • 杞县各村村名的来历(疑难解答)

    传在明朝时期黄河经此,每次黄河的汛期官家在此村收谷草防汛情,后因此称村为草市。王和寺:此村距县城约9公里左右,归邢口镇管辖。后王子宽大闹相国寺,调戏民女未得逞后逃回青龙寺。民女将此事告官,官家派兵辑拿王子宽。王子宽不敌官兵众多遂远走他乡不再归寺。也有另一传说村中原有张马二姓,而张姓家族较大,故称为马大张。

  • 流浪地球二刘德华(流浪地球2曝劳模)

    1905电影网讯9月27日是刘德华的61岁生日。长期对家庭亏欠,让妻子提出离婚,修浩陷入卧底与家庭破碎双重困境。该片已于2022年杀青,将于2023年上映。目前,影片已正式进入紧锣密鼓的拍摄阶段,有望提前锁定2023年的头部电影市场。作为“中国第一部空中犯罪电影”,影片讲述了世界上最大的三层豪华客机A380首航遭遇劫机惊魂,刘德华饰演的父亲与张子枫饰演的女儿在万米高空联手对抗劫匪的故事。

  • 卤水太黑处理方法(卤水太黑处理方法是什么)

    卤水太黑处理方法香料洗干净浸泡之后再放入,会减轻卤水黑的程度。香料在制作的过程中,会有一些灰尘附着在香料的表面。经过清洗,浸泡之后,就可以去除这些杂质,以免这些造成卤水的颜色不好。键入适量的水,可以降低卤水黑的程度。将卤水分成一定的量,放入冰箱,分批使用。用笊篱将这些残渣滤出来,可以减轻卤水的颜色。卤食物的时候,多放一些食材。尝尝卤水的味道,看看缺哪些香料及时进行补充。

  • 2022-2023成都迷笛音乐节有什么跨年活动?

    part3年度大奖奖品成都迷笛年票x2抽奖时间12月31日演出结束1月1日演出结束抽奖地点上山Livehouseps:成都迷笛年票可观看成都迷笛2023年全年所有演出,包括上山Livehouse演出以及在成都举办的迷笛音乐节。活动时间12月31日-1月1日活动规则与任意当天参演音乐人合影并发送微博@成都迷笛中心PS:与@大神棍乐队合影有更多惊喜哦!如果跨年活动当天,你真的不小心脱单了,你就发微博@成都迷笛中心,官方送你们两张上山月票,名额有限,先脱先得。

  • 手机内屏坏了什么现象(机内屏坏了什么表现)

    跟着小编一起来看一看吧!手机内屏坏了什么现象一般来说手机内屏坏了显示就不正常了,一般表现为花屏或显示不全;触摸屏坏会出现触摸不正常,部分区域触摸不正常。手机黑屏了,不知道是触摸屏或液晶屏问题时,手机可以同时按电源键和HOME键10秒左右,如果手机会重启了并显示了,原因是死机了,可能是主板坏或电池问题,若还是黑屏,可能就是手机内屏坏了。

  • 横县哪个镇人口最多(广西横县撤县设市)

    7月29日上午,广西横县举行撤县设市揭牌仪式,正式宣告设立横州市。今年2月,经国务院批准,民政部批复同意撤销横县,设立县级横州市,由自治区直辖,南宁市代管,横州市以原横县的行政区域为横州市的行政区域。横州茉莉花、茉莉花茶产量均占全国的80%以上、世界的60%以上,综合品牌价值达206.85亿元,蝉联广西最具价值农产品品牌。

  • 物流管理专业学什么(物流管理简介)

    下面希望有你要的答案,我们一起来看看吧!物流管理专业学什么物流管理专业主要学习课程有物流概论、物流规划与设计、采购与供应管理、采购项目管理、运输管理、仓储管理、配送管理、国际物流学、国际贸易理论与实务、采购过程演练、运输实务等。