轉自: 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();
case "Form1":
Form1 frm2 = new Form1();
frm2.Show();
}
}
在js可以這樣調用該方法:<input type="button" onclick="window.external.OpenForm(PurchaseOrder)" value="采購訂單">