C/S模式开发中如何利用WebBrowser控件制作导航窗体

原文:C/S模式开发中如何利用WebBrowser控件制作导航窗体

转自: CSDN

相信不少同学们都做过MIS系统的开发,今天这里不讨论B/S模式开发的问题.来谈谈winform开发.
用过市面上常见进销存系统的同学肯定知道,在进入系统之后一般在mdi窗体中系统自动打开一个导航子窗体.
将一些常见的功能以非常直观的图形展示给用户.
观察市面上的此类产品,该功能基本是所有mdi窗体开发的管理系统中必备的功能窗体.下面我们就来分析一下如何在.net中实现这个功能.幸好我上次做了一个类似的系统,里面也用到了导航功能.特此奉献自己的开发经验.
哈哈,光看文字是不是很累啊,可能很多同学还不太了解.来个导航窗体效果图片先.
以下这个图是某个用.net开发的进销存系统中的导航截图.


是不是很爽啊?
如何实现呢?现在一般有两种做法:
1.通过gdi或者pictureBox等贴图+复杂编程实现.非常麻烦,速度也慢.
2.通过web方式实现界面.利用代码获取web事件,实现了界面和程序分离.非常方便,而且速度快.
第一种没有必要讲了,现在很少有公司会这么来做了.下面谈谈第二种,也就是本文的主题.
说到在winform中加入网页,我们自然就想到了webBrowser控件.
看看msdn的帮助,里面有一个重要的属性,Document(HtmlDocument类),继续查看msdn,HtmlDocument有一个重要的方法:InvokeScript,来看看msdn解释:执行在 HTML 页面中定义的动态脚本函数。
^_^,看到曙光了吗?这个方法可以很方便的处理webbrowser控件中的网页js代码.
因此我们可以很容易的在C#中调用js函数来控制网页.
但是如何实现网页中代码调用C#的方法呢?大家可以查看msdn ComVisibleAttribute 类:
控制程序集中个别托管类型、成员或所有类型对 COM 的可访问性。

也就是说我们只需要在winform窗体中引入System.Runtime.InteropServices 命名空间.
在窗体类和需要调用的方法前面加上属性声明 [ComVisible(true)]

具体代码如何实现呢?
winform中方法示例为:
[ComVisible(true)]
        public void OpenForm(string formName)
        {
            if (string.IsNullOrEmpty(formName))
                return;
            switch (formName)
            {
                case "PurchaseOrder":
                    Form_PurchaseOrder frm = new Form_PurchaseOrder();
                    frm.Show();
                    break;
                case "SaleOrder":
                    Form_SaleOrder frm1 = new Form_SaleOrder();
                    frm1.Show();
                    break;
                case "Form1":
                    Form1 frm2 = new Form1();
                    frm2.Show();
                    break;
            }
        }
在js可以这样调用该方法:<input type="button" onclick="window.external.OpenForm(PurchaseOrder)" value="采购订单">

 

时间: 2014-06-14
Tags: 函数, string

C/S模式开发中如何利用WebBrowser控件制作导航窗体的相关文章

在Winform开发框架中,利用DevExpress控件实现数据的快速录入和选择

在实际的项目开发过程中,有好的控件或者功能模块,我都是想办法尽可能集成到我的WInform开发框架中,这样后面开发项目起来,就可以节省很多研究时间,并能重复使用,非常高效方便.在我很早之前的一篇博客<在GridControl控件中使用SearchLookUpEdit构建数据快速输入>就曾经介绍,如何在列表控件中实现数据的快速录入,本文介绍另外一种方式,通过文本输入框的输入选择,可以实现数据的快速录入,原理和之前一篇差不多,不过这次利用DevExpress控件的GridLookupEdit控件封

java源码-java语言中怎么用webbrowser控件

问题描述 java语言中怎么用webbrowser控件 用java语言写一个程序从网页找到文档链接并实现下载和删除功能? 解决方案 我也不知道,大家帮帮忙吧 解决方案二: 用java语言实现WebBrowser

在.NET开发中灵活使用TreeView控件

treeview|控件 ASP.NET真正有用的特性就是其可扩充性.世界各地的开发人员都可以创建自己的自定义控件,这种自定义控件可以方便地在你自己的过程中进行定义.其中,Internet Explorer Web Controls就是由微软公司在标准的ASP.NET控件之外创建的这样一个集合. Windows资源管理器中的驱动器和其下的文件及文件夹就是按照一种层次结构来安排的,在这个控件集中有一个treeview控件为我们提供了一种按层次结构显示信息的方式.treeview控件包含了称做"节点&

在MFC应用中深入定制WebBrowser控件(转)

web|webbrowser控件 正如VC ++ 6.0的演示程序MFCIE所示,用应用程序向导创建一个具有Web导航能力的MFC应用可谓轻而易举.本文在此基础上,进一步讨论两个问题:资源自包含的实现,上下文菜单以及快捷键的完全控制. 一.资源自包含及res协议 所谓的资源自包含,指的是在最终产品中HTML文档(包括相关资源如脚本.图片)成为执行文件的一部分,就象其它资源(如应用程序图标)一样,而不是以独立文件形式分发. 资源自包含不仅使产品分发更为方便,而且在最终用户面前隐藏了更多的实现细节,

在WINFORM中,有webBrowser控件和HtmlDocument对象,那么ASP.NET里呢?

问题描述 小弟在WINFORM中,使用webBrowser请求某一网页,然后返回HTML代码,再用HtmlDocument对象提取出HTML代码中的需要的东西,现在要使用ASP.NET实现,请问有类似于这两种控件吗?1:webBrowser控件,不一定要可以看到页面,只要输入一个网址,既能请求并且获取到该网页中的HTML代码.2:HtmlDocument对象,可以用这个对象可以简单找到HTML代码中的元素上面两个东西,请问在ASP.NET里有没有什么可以实现的方法,谢谢大家! 解决方案 解决方案

Silverlight实用窍门系列:39.Silverlight中使用Frame和Page控件制作导航【附带实例源码】

在Silverlight中有时需要进入不同的XAML页面,但是一般情况下是不能实现"前进"和"后退"的,在这里我们可以使用Frame+Page控件制作导航功能实现上一页和下一页的跳转功能. 在本文中我们制作一个实例如下:添加一个Frame控件,然后点击"加载UC"和"加载PageShow"按钮加载UC.xaml和PageShow.xaml页面.在加载后我们可以通过鼠标右键菜单中的"上一页"和"下一

HTML中利用WebBrowser控件进行打印页面的控制

我们知道,web中打印并不容易. 但是利用IE浏览器自带的 Web Browser控件,我们可以轻松地做到控制打印页面设置,包括横向,纵向排列,打印预览等. 调用该控件很简单,只需要在html代码中加入如下语句即可: <object id="WebBrowser" height="0" width="0" classid="CLSID:8856F961-340A-11D0-A96B-00C04FD705A2">&l

iOS开发中一些手写控件及其相关属性的使用_IOS

手写控件,frame,center和bounds属性 一.手写控件 1.手写控件的步骤 (1)使用相应的控件类创建控件对象 (2)设置该控件的各种属性 (3)添加控件到视图中 (4)如果是button等控件,还需考虑控件的单击事件等 (5)注意:View Contollor和view的关系 2.注意点 在OC开发中,Storyboard中的所有操作都可以通过代码实现,程序员一定要熟练掌握代码布局界面的能力! 设置控件监听方法的示例代码如下: 复制代码 代码如下: [btn addTarget:s

详解iOS App开发中改变UIButton内部控件的基本方法_IOS

UIButton内部默认有个UIImageView.UILabel控件,可以分别用下面属性访问: 复制代码 代码如下: @property(nonatomic,readonly,retain) UIImageView *imageView; @property(nonatomic,readonly,retain) UILabel     *titleLabel; UIButton之所以能显示文字,完全是因为它内部的titleLabel也,也就是说,UIButton的setTitle:forSta