放弃winform的窗体吧,改用html作界面,桌面应用程序UI的新的开发方式。

做过很多winform项目,都为winform控件头疼不已。想实现一些漂亮的样子总是很难。我这里列举几个缺点:

1.winform控件大多是 绝对布局 ,你需要给出准确的坐标。那么在实现居中效果就会很难。

2.学习成本,也了解各个控件的结构,属性等。要想更熟练的掌握需要很多时间。

3.实现界面的成本,调整各个窗体,控件的样式到原型图的效果要用很长时间。

4.维护,需要懂得WINFROM的程序员来进行维护。

 

先想到这么多.我接触android后,发现android实现UI的方式很有意思,使用xml描述视图,使用window包裹activity实现各个窗口。那我们能不能把这样的形式在桌面应用开发上使用?于是在新项目中,我开始启用新的开发方式:

1.写一个html描述UI,类似android里的layout布局文件。

2.准备一个form窗体作为承载,在这个窗体里放置一个webbrowser控件作为显示控件,那么这个控件可以直接显示html

3.为webbrowser控件指定 ObjectForScripting 对象,一般情况下这个对象是个c#实现的class的实例。这个对象实现了 可以和webbrowser控件里的html实现的dom模型交互。它提供了一个通道,可以再这个ObjectForScripting对象里调用javascript和使用javascript调用这个对象里的方法。

基于以上的方式我实现了一个简单的框架。

1.写一个基本的ControlSupport,它是所有可以作为ObjectForScripting 对象的基类。用于和html交互。

2.在ControlSupport中必须实现oncreate方法,他会在创建时加载。

3.为ControlSupport实现SetContentUrl方法,指定一个本地的html文件给webbrowser控件,那么就可以显示它。

4.为ControlSupport实现InvokeScript方法,在这里可以调用js中的方法。

5.在js中,可以通过下面的方法调用 ControlSupport里的方法。

 if (typeof window.external.getMaterialList != "undefined") {//触发浏览器的 后台方法,这个方法只在我们的winform程序发生
                window.external.getMaterialList(callback_getMaterialList);}

6.通过上面的实现,那么ControlSupport类看起来就像个 activity(android里的页面),我还实现了一个栈,页面显示时,将是位于栈顶的。那么借助这个堆栈的能力,我们可以实现窗体的跳转和返回。

 

通过以上的方式。我们基本可以完成使用html来做页面的操作。效果非常的爽,终于可以摆脱winform控件的。实现各种表现方式都非常的简单。HTML嘛,更加的灵活。

 贴个图吧。下面这个界面就是用这种方式实现的,仅仅顶部是用winform控件实现的。左侧的导航和右下侧的内容区都是用html来做的页面。效果看起来完全是一个整体。

转载于:https://www.cnblogs.com/vir56k/p/3213620.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/301108.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数学建模必备算法模型,全新升级!

转眼间2019年已经过去了四分之一,近日,2019年数学建模国赛的时间也已经出来啦,确定为9月12日(周四)18时至9月15日(周日)20时。随着各种各样的数模比赛源源不断地开展,时不时有小伙伴…

好长时间没更新了

这段时间一直都在忙着写CoagelEngine,没时间上来更新。花了一个月的时间,现在基本把渲染器的框架写好了。渲染器是用Visitor模式实现的。同时API无关,理论上来说同样可以支持Directx,不过我没用过DX,现在只实作了GLRen…

boostrap 鼠标滚轮滑动图片_16种基于Bootstrap的css3图片hover效果

bootstrap-image-hover是一款基于Bootstrap的css3图片hover效果。这组图片hover效果共16种特效。同时该特效也支持非Bootstrap版本。使用方法在页面中引入bootstrap相关文件和FontAwesome字体图标文件以及effects.min.css文件。HTML结构该css3图片hover效果的每一种效果都有它们…

从零开始学C++之STL(七):剩下5种算法代码分析与使用示例(remove 、rotate 、sort、lower_bound、accumulate)...

一、移除性算法 &#xff08;remove&#xff09; C Code 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 // TEMPLATE FUNCTION remove_copy template < class _InIt, class _OutIt, cl…

20 种物体破剖面图,真正的让你脑洞大开

全世界只有3.14 % 的人关注了数据与算法之美有很多东西的内部世界十分复杂&#xff0c;单纯的从表面看难以窥其精锐&#xff0c;今天咱们来看那些被劈成两半展示横截面的东西&#xff1a;1.安全气囊2.打火机3.各种枪械消音器4.集装箱船5.路虎车6.曲棍球头盔7.人类心脏8.数码相机…

一个女孩子对老公/男朋友的要求

*有点害羞&#xff0c;但曾在分别的街头&#xff0c;大声说我爱你。 *同我去庙里求签&#xff0c;轻轻捉住我的手一同跪下。 *言而有信。 *从来不迟到--我迟到他不生气。 *拥抱很久、很紧--每次我起身时几乎是需要慢慢推开他。 *睡得比我迟一点&#xff0c;醒来早一点。 …

你的公司内卷化了吗?

大家看上去都很忙&#xff0c;但就是没结果怎么办&#xff1f;忙有结果都是好的&#xff0c;没有结果都是问题。其实可以从三方面来看这个问题&#xff1a;1、没有正确找到方法大家都在教科书学过一只乌鸦喝水的故事。故事告诉人们遇到困难不要放弃&#xff0c;要运用身边可以利…

java.awt.headless_以编程方式设置java.awt.headless = true

小编典典我正在使用一个main()类&#xff0c;该类在常量(和其他静态代码)中静态加载JFreeChart的不同部分。将静态加载块移到类的顶部解决了我的问题。这不起作用&#xff1a;public class Foo() {private static final Color COLOR_BACKGROUND Color.WHITE;static { /* too l…

飘逸的python - hack输出流便于调试

当项目有很多文件时&#xff0c;要找出控制台的输出是在哪里print出来的很麻烦&#xff0c;不过这事对于强大的python来说小菜一碟。 先上代码和效果&#xff0c;再说明。 import sys,traceback class mystdout:stdout sys.stdoutdef write(self,_str):if _str ! \n:filepath…

每日一笑 | 3 X 4 = ?

全世界只有3.14 % 的人关注了数据与算法之美&#xff08;图源网络&#xff0c;侵权删&#xff09;

ASP.NET下MVC设计模式的实现

1 MVC设计模式简介 MVC由Trygve Reenskaug提出&#xff0c;首先被应用在SmallTalk-80环境中&#xff0c;是许多交互和界面系统的构成基础。MVC结构是为那些需要为同样的数据提供多个视图的应用程序而设计的&#xff0c;它很好的实现了数据层与表示层的分离。MVC作为一种开发模型…

堵俊平:开放治理是开源社区的终极之路 | DEV. Together 2021 中国开发者生态峰会...

内容来源&#xff1a;2021 年 6 月 5 日&#xff0c;由 SegmentFault 思否主办的 2021 中国开发者生态峰会圆满落幕。会上&#xff0c;开放原子开源基金会 TOC 主席、华为计算开源总经理堵俊平发表了《开放治理&#xff1a;开源社区的终极之路》的主题演讲。分享嘉宾&#xff1…

php防止快速刷新代码(分享)_php防止网站被刷新的方法汇总

本文实例讲述了php防止网站被刷新的方法。分享给大家供大家参考。具体方法如下&#xff1a;对于像采用WP建设的站来说&#xff0c;频繁的刷新会导致数据库吃紧。下面附上一段代码,防止频繁的刷新造成的死机情况。方法一,代码如下:session_start();$k$_GET[k];$t$_GET[t];$allow…

2013年7月27日杂记

今天周六加班一直在开会&#xff0c;早上起床后看了JS精粹一书&#xff0c;感觉里面讲的东西真是很好&#xff0c;我应该学习&#xff0c;应该记住其中的知识点然后多实践多真正做出些东西。这会头很晕有点想睡觉&#xff0c;但潜意识居然想看电视&#xff0c;居然不能管住自己…

每日一笑 | 谷歌能严谨到什么地步?

全世界只有3.14 % 的人关注了数据与算法之美&#xff08;图源网络&#xff0c;侵权删&#xff09;

浏览器的定制与扩展

下载源代码 本文分如下章节&#xff1a; 前言 在MFC中使用浏览器 怎样扩展或定制浏览器 定制鼠标右键弹出出菜单 实现脚本扩展(很重要的external接口) C代码中如何调用网页脚本中的函数 定制消息框的标题 怎样定制、修改浏览器向Web服务器发送的HTTP请求头 怎样修改浏览器标识 …

通过反射实现IOC功能

闲来没事&#xff0c;自己就想着根据反射可以自己写一个简易的IOC组件。IOC组件说白了就是根据反射实例化对应的接口。废话不多说&#xff0c;开始说说我的解决方案。1、项目结构图&#xff1a;IOCTest为web MVC项目。Common 通过配置文件实例化对应的接口IBLL定义的接口BLL实现…

php 分享微博,php微信分享到朋友圈、QQ、朋友、微博

本文实例为大家分享了php微信分享到朋友圈、QQ、朋友、微博的具体代码&#xff0c;供大家参考&#xff0c;具体内容如下前台代码wx.config({debug: false,appId: "{$signPackage[appId]}",timestamp: "{$signPackage[timestamp]}",nonceStr: "{$signP…

base函数

Basename函数 参考资料 http://monkeymusic.blog.163.com/blog/static/4797639200912533652666/ 解释 basename - strip directory and suffix from filenames 去除给出字符串的前缀例子 Shell命令&#xff1a;basename a/b/c/d/test/a.ppt 输出&#xff1a;a.ppt 可以在后面添…

如果这个世界都不按套路出牌将会变成怎么样。。。 | 今日最佳

全世界只有3.14 % 的人关注了青少年数学之旅&#xff08;图源网络&#xff0c;侵权删&#xff09;请你有话“直”说↓ ↓ ↓