当前位置 > 首页 > Asp.net

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

2007-6-18 11:18:00来源:Asp.net

相信不少同学们都做过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="采购订单">

是不是很简单?这里不贴出详细的实现代码,详细代码请看附件demo:
/Files/gofixiao/Web001.rar



GOFI XIAO 2007-06-18 09:46 发表评论


  • Edit and Encrypt Web.Config sections using C# 2.0

    2007-7-20 10:20:00

    ASP.NET 1.x allowed configurations in web.config file to be read from .NET application. But there w

  • Microsoft to release VB6 as Open Source

    2009-4-1 12:09:00

    After many years of complaints from the VB6 developers around the world, Microsoft has finally agre

  • C#3.0笔记(二)预备知识之委托与事件

    2009-4-26 0:22:00

    摘要: 在上篇blog中简单地介绍了委托的基础知识,在这片文章中会介绍下委托跟事件之间的联系。事件的由来我们可以看到在使用委托进行回调的实现的时候,我们往往需要再定义一个委托对象,以及一个对外公开的

  • Announcing ASP.NET MVC 3 (Release Candidate 2)

    2010-12-12 16:55:00

    Earlier today the ASP.NET team shipped the final release candidate (RC2) for ASP.NET MVC 3.  Y

  • jQuery hoverImage plugin

    2009-12-25 22:18:00

    At the project I’m currently reviewing they’ve used a lot of hover effects for images and links con

  • 『原创』让.Net CF实现智能提示(AutoComplete)功能

    2010-9-15 20:49:00

    作者: Jack Fan 发表于 2010-09-15 20:12 原文链接 阅读: 98 评论: 0 前言 最近,一直在做Winform方面的开发,有一个公交信息查询的场景,用户

  • Links 2009-04-06

    2009-4-7 4:49:00

    SharePoint Customizing SharePoint Context Menus Hidden SharePoint Lists, Fields, and

  • 使用ASP.NET AJAX Control Toolkit中的NoBot控件拒绝垃圾发布程序

    2007-3-16 14:18:00

    摘要: 网络上的垃圾信息似乎无处不在,从前是垃圾邮件、广告等。而现在,这些无孔不入的垃圾信息发布者又盯上了互联网上的各大网站。各种机器人程序(Bot)应运而生,它们可以自动在网络上爬行并寻找带有评论

  • CSS 中浏览器高度自适应

    2009-7-9 15:08:00

    CSS用了这么久居然被一个小问题给卡牢了,研究了半天终于解决,特在此留下脚印,希望遇到相同问题的友友们少走弯路。 容器要求高度随浏览器的变化而自适应填充(不用JS),仅仅用CSS完成的高度自适

  • PHP绘制3D图形 之 自定义图形及矢量图

    2009-8-27 18:52:00

    摘要: 上一篇进行了一些简单3D图形实例,本篇介绍自定义及矢量图实例。首先绘制一个三尖角星体,分别由“前面”,“后面”和三个“侧面”组成。 ---------------------------