在
上一篇文章中我們主要講了C#如何和JS通信,
這一篇文章中,我們將創建一個最基礎的Button控件
WUI庫中控件的繼承機制
我們先解釋最簡單的繼承機制,以后WUI庫的繼承機制會比這個復雜的多
第一:PanelMain類
我們在上一篇中說了,PanelMain是一個特殊的Panel,每一個用戶程序都應該自己實現一個PanelMain類的子類,用戶把這個子類的實例交給WUI庫,
WUI庫把這個實例當作第一個容器控件添加到窗體中,WUI庫告訴用戶什么時候這個用戶控件創建完畢,用戶可以在PanelMain創建完畢的事件中,完成接下去的工作,比如創建更多的子控件
第二:ControlBase類
是所有控件的基類,並提供一個基礎的屬性和方法
第三:ControlContainer類
是所有容器類控件的基類,這里會提供一些AddChild之類的方法和一些特殊的屬性
第四:ControlSimple類
是所有基本元素的積累,比如說Button和Lable類
|
![]() |
使用Button類
在上一篇文章中,我們實現了繼承自PanelMain的Main類,
而且我們在這個類中注冊了OnRender事件,
我們在這個事件中創建了我們的Button類的實例,並使用了他
看起來是不是很方便啊,第二幅圖是最終的運行結果
|
![]() |
![]() |
Button類的構造函數
![]() |
我們在構造函數中把Id屬性賦值為Button加一個隨機數,隨機數主要是為了保證頁面中所有的按鈕的ID不會重復
|
Button類的ToHTML方法
![]() |
首先:Button類是繼承自ControlSimple類,ControlSimple類繼承自ControlBase類
其次:Button類重寫了父類(ControlBase類)中的ToHTML方法,這個方法是所有控件必須要實現的方法,一個控件要呈現在用戶的眼前,必定需要一段HTML代碼,這樣瀏覽器才好呈現這個控件,我們這個方法就是做這個工作的
再次:我們創建的這個DIV的ID就是我們Button類實例的ID,為以后瀏覽器和C#交互打下基礎
|
PanelMain的AddChild方法
![]() |
在這個方法中,我們把創建出來的Button添加到了WebBrowser的頁面上
因為前面我們提到過,PanelMain是一個特殊的Panel,他其實代表着頁面的Body,我們添加一個控件,就是添加到頁面的body中去的
紅框勾出來的兩處代碼,我們在下一篇文章中解釋
|
完善工作
![]() |
第一:
在用戶的應用程序發布時,我們不希望讓用戶看到右鍵菜單,也不希望讓用戶看到腳本錯誤(如下兩個圖片),(而且將來
WUI庫中會自己實現菜單)
所以我們使用這兩行代碼完成這兩項工作
WB.ScriptErrorsSuppressed = true;
WB.IsWebBrowserContextMenuEnabled = false;
同時,我們也加入了預編譯指令#if !DEBUG,來保證只有Release狀態下,這兩行代碼才生效
第二:
我們使用System.Environment.CurrentDirectory來獲取應用程序的啟動目錄,以保證用戶把工程放在任何位置的時候,資源都能正確的加載
|
![]() |
![]() |
|
修改記錄
2015-1-20:完成了文章的部分內容,完成了所有代碼
2015-1-21:
完成了文章的全部內容,修改了代碼
我會在下一篇文章中介紹控件的事件機制-------------------您的推薦是我寫下去的動力>>>>>>>>