天天看点

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

转自: CSDN

相信不少同学们都做过MIS系统的开发,今天这里不讨论B/S模式开发的问题.来谈谈winform开发.

用过市面上常见进销存系统的同学肯定知道,在进入系统之后一般在mdi窗体中系统自动打开一个导航子窗体.

将一些常见的功能以非常直观的图形展示给用户.

观察市面上的此类产品,该功能基本是所有mdi窗体开发的管理系统中必备的功能窗体.下面我们就来分析一下如何在.net中实现这个功能.幸好我上次做了一个类似的系统,里面也用到了导航功能.特此奉献自己的开发经验.

哈哈,光看文字是不是很累啊,可能很多同学还不太了解.来个导航窗体效果图片先.

以下这个图是某个用.net开发的进销存系统中的导航截图.

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

是不是很爽啊?

如何实现呢?现在一般有两种做法:

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();

                case "Form1":

                    Form1 frm2 = new Form1();

                    frm2.Show();

            }

        }

在js可以这样调用该方法:<input type="button" onclick="window.external.OpenForm(PurchaseOrder)" value="采购订单">

继续阅读