天天看點

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="采購訂單">

繼續閱讀