勇哥谈下C# winform下自定义用户界面的原理

勇哥注:

用户自定义界面用途非常广泛,其原理有点小神秘,本篇勇哥来聊聊这个话题。


什么是用户自定义界面呢?

首先我们看下VS的winform面板编辑器,它可以看做是一个用户自定义界面。

如下图所示:

用户左边拖控件,拖到form上,可以排放位置。选中控件,还可以在右边设置它的属性。

image.png


另一个例子是HMI的编辑器。

这个跟vs的form编辑器效果是一样的。

image.png


还有组态软件的编辑器,除了上面两者的功能外,它还可以连线。以此来表示运行流程。

image.png


在视觉软件中,使用流程图来表示测量逻辑,例如下面是凌云软件的流程编辑器的效果。

这种跟组态软件是类以的,只是它更复杂,有自己的一些特点:例如元件的规整化、整体收缩和展开等。

image.png


以上这些都属于自定义用户界面。它最基本的功能(或者说是共性的功能)我们总结一下:

1。 可以在一块画布上摆放控件

2。 控件都可以配置属性

3。 控件摆放设计完成后,可以运行起来,用户可以看到并操作这个界面。


对于前两种功能,恐怕人人都可以写出来。

难点在于第3点。

我们以vs的那个winform编辑器来说,当你摆放好控件后,你得编译修改的内容,它才可以run起来,然后用户可以看到并操作界面。

那怎么样让你的界面run起来呢?

你可能会想到,这是不是用C#调用 Roslyn(.NET Compiler Platform)来动态编译代码来实现?

如果你这样想,那就闯到无人区了,Roslyn动态编译这个,B站少有人提起,短时间恐怕是搞不定的。



其实,不要想复杂了,按勇哥说的原理就可以实现:

1。 拖控件这个,你只用把控件拖进panel中去就可以了,通过一些事件,你可以移动这些控件,包括调整它们的大小

      因为panel是个容器,你拖C#的控件,或者自定义控件进去也是可以的。

2。 那我设计的这个页面,怎么更新到主界面上呢?

       你可以把你的页面编辑结果序列化到磁盘上,然后在主界面上也弄个panel,再把数据读出来回显到panel里就行了。

       或者你也可以把你设计页面的那个form,嵌入到主界面的一个容器里去。

3。 怎么让界面点击有功能效果。

       因为你的程序在运行中,那么直接点击你的界面上的控件就有效果。

       这些控件与它关联的事件代码中,已经包含了你事先准备好的逻辑了。


下面是勇哥写的一个小演示:

我们正是利用了C#的控件及期事件,才避免了复杂的GDI+代码。

至于像组态编辑器那样的自定义控件,我们都让它继承C#的控件基类就可以了,所以它还是算C#的控件。

image.png


至于组态的编辑器,它的连接线,就非得GDI来绘制了。而且还不容易,比如你得考虑画面控件移动的时候,连接线还得跟着移动。

可能还要考虑画布滚屏的功能。

如果控件本身+连接线都是GDI做的,我们就没办法利用上控件自身的功能了,控件的绘制与事件都得自己去弄了。

这个又可以难倒一大片人了。





本文出自勇哥的网站《少有人走的路》wwww.skcircle.com,转载请注明出处!讨论可扫码加群:
本帖最后由 勇哥,很想停止 于 2024-08-30 15:49:41 编辑

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

会员中心
搜索
«    2025年2月    »
12
3456789
10111213141516
17181920212223
2425262728
网站分类
标签列表
最新留言
    热门文章 | 热评文章 | 随机文章
文章归档
友情链接
  • 订阅本站的 RSS 2.0 新闻聚合
  • 扫描加本站机器视觉QQ群,验证答案为:halcon勇哥的机器视觉
  • 点击查阅微信群二维码
  • 扫描加勇哥的非标自动化群,验证答案:C#/C++/VB勇哥的非标自动化群
  • 扫描加站长微信:站长微信:abc496103864
  • 扫描加站长QQ:
  • 扫描赞赏本站:
  • 留言板:

Powered By Z-BlogPHP 1.7.2

Copyright Your skcircle.com Rights Reserved.

鄂ICP备18008319号


站长QQ:496103864 微信:abc496103864