自己動手寫客戶端UI庫——創建第一個控件


上一篇文章中我們主要講了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

完成了文章的全部內容,修改了代碼
 
 

我會在下一篇文章中介紹控件的事件機制-------------------您的推薦是我寫下去的動力>>>>>>>>


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM