




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
DEV414:WindowsForms進(jìn)階:寫一個定制控件顧問咨詢部Microsoft(China)內(nèi)容WindowsFormsFrameworkWindowsForms&GDI+編寫一個例子控件-(AlarmClock)描繪控件添加屬性(Properties)添加事件(Events)使用該控件添加Collection屬性-(AlarmTimesCollection)快速通過-(類型轉(zhuǎn)換、屬性編輯器)總結(jié)Windows
Forms的優(yōu)勢WinForm具有CLR的開發(fā)優(yōu)勢:GC,語言無關(guān),底層操作,安全框架在WindowsForms,WebForms,System.Net等類庫都具有相同的設(shè)計模式豐富的,可擴(kuò)展的設(shè)計時支持簡潔!沒有一大堆的頭文件,IDL,libs,
obj,等等.Web感知的,data感知的真正的,豐富的運(yùn)行時類型信息WindowsForms繼承關(guān)系ComponentStandardIComponentImplControlBasicHWNDWrapperTimerButtonBaseListViewScrollableControlListControlButtonCheckBoxRadioButtonContainerControlUserControlDesignableFormTopLevelWindowComboBoxListBoxComponentAndIComponentComponent對IComponent接口進(jìn)行了標(biāo)準(zhǔn)的實現(xiàn)IComponent包含一個Site屬性,Site是Component和Container之間的通信接口提供一個Events屬性-包含所有連接到該組件的事件處理者Control–
WindowsForms的核心Control包含窗口句柄(HWNDwrapper)處理主要的一些窗口消息(WM_*)為用戶的輸入,描繪和布局提供一些事件包裝ActiveX負(fù)責(zé)句柄的創(chuàng)建和重建通過Handle屬性暴露HWND如果HWND不存在,在訪問該屬性時會立刻建立一個如果重載WndProc()方法,那么可以處理任何窗口消息訪問底層系統(tǒng)WndProc的例子:privateconstintWM_COMPACTING=0x041;protectedoverridevoidWndProc(refMessagem){ case(m.msg){ caseWM_COMPACTING: OnCompacting(); break; } base.WndProc(m); }ScrollableControl
AndContainerControlScrollableControlControl支持自動滾動(AutoScroll,VScroll,HScroll)AutoScrollMargin,AutoScrollMinSize屬性定義滾動的范圍等信息ContainerControl實現(xiàn)一個Control的容器管理控件的焦點(Tab)-本身不接受焦點實現(xiàn)所有ScrollableControl的功能支持布局(Dock,Anchor)DemoRootDesignableTypes:UserControlAndFormUserControl組合控件的基類型(ComboBox)自定義控件的基類型FormWindowsForms頂層控件提供一些屬性來操作Systemmenu,minimize/maximize按鈕,菜單等使用GDI+Drawing類的基類是System.Drawing.Graphics可以從Control.Paint事件的參數(shù)獲得,或者用Control.CreateGraphics建立和HDC類似對象在結(jié)束使用時自動清理(GC),但是最好手工調(diào)用Dispose。(Win9x平臺必須手工處理!)有很多系統(tǒng)標(biāo)準(zhǔn)對象例如:SystemColors,SystemBrushes,SystemIcons,SystemPensControlPaint封裝了一些畫Control的公共功能簡單的GDI+操作寫一段文本Graphicsg=someCtl.CreateGraphics();g.DrawString(“HelloWorld!”,someCtl.Font,SystemBrushes.WindowText,0,0);g.Dispose();簡單的GDI+操作畫一個綠色的圓Graphicsg=someCtl.CreateGraphics();Brushb=newSolidBrush(Color.Green);g.FillEllipse(b,0,0,100,100);b.Dispose();g.Dispose();GDI+基礎(chǔ)
屬性是聰明的字段(類成員)自然的語法和訪問器public
classButton:Control{
privatestringtext;
publicstringText{
get{
returntext;}
set{text=value;Repaint();}}}DimbAsNewButtonb.Text="OK"DimsAsString=b.Text屬性用Delegate來實現(xiàn)事件實現(xiàn)事件要有三樣?xùn)|西(Control)一個類封裝了事件要傳遞的數(shù)據(jù)AlarmEventArgs一個事件的delegateAlarmEventHandler一個產(chǎn)生事件的類(你的Control)一個事件聲明publiceventAlarmEventHandlerAlarm;一個方法來產(chǎn)生事件protectedvirtualvoidOnAlarm
(AlarmEventArgse){if(Alarm!=null)Alarm(this,e);}用Delegate來實現(xiàn)事件PublicSubOnClick(ByValsenderasObject, ByValeasEventArgs)Handles Button1.Click ‘DosomethingEndSubVB用戶的用法實現(xiàn)一個Control我們要做一個鬧鐘控件從Control派生第一步,我們實現(xiàn)它的運(yùn)行時的功能,第二步添加一些設(shè)計時的功能DEMO-最終效果Clock_6_Designer為現(xiàn)有的Windowtype做一些擴(kuò)展Control.CreateParams允許你控制CreateWindowEx
的調(diào)用ExampleSystem.WinForms.Button privateconstintBS_PUSHBUTTON=0x0;privateconstintBS_OWNERDRAW=0xB;protectedCreateParamsCreateParams{ overrideget{ CreateParamscp=base.CreateParams; cp.ClassName="BUTTON"; cp.Style|=BS_PUSHBUTTON; cp.Style|=BS_OWNERDRAW; returncp; }}重載OnPaint方法調(diào)用base.OnPaint(pe)
如果你希望基類為你畫點什么畫一個鬧鐘
Clock_1_Painting加一大堆事件privatestaticreadonlyobjectEventFoo=newobject();publiceventEventHandlerFoo{ get{ returnbase.Events[EventFoo]; }
set{ base.Events[EventFoo]=value; }}加事件和屬性到鬧鐘控件
Clock_2_PropEvent用Collection屬性WindowsForms大量使用Collection屬性ListBox.ItemsListView.ColumnsToolbar.ButtonsControl.Controls動態(tài)Collection屬性應(yīng)該實現(xiàn)System.Collections.IList接口(Item(Indexer))Collection永遠(yuǎn)不要返回NULL,可以返回一個空的Collection!加一個Collection屬性到鬧鐘控件
Clock_3_CollectionPropMetadata和Attributes如何添加為類添加一些附加的描述信息
[Category("Appearance"),Description(“Textdescribingproperty"),DefaultValue(“OK”),Bindable(true)]publicstringText{....}}Attributes.NETFramework定義了很多Attributes所有的.NETFrameworksAttributes從System.ComponentModel.MemberAttribute派生BrowsableAttributeBindableAttributeCategoryAttributeDefaultEventAttribute/DefaultPropertyAttributeDesignerAttributeLicenseProviderAttributeMergablePropertyAttributeDesignerSerializationVisibilityAttributeToolboxItemAttribute加attributes到鬧鐘控件
Clock_4_MetaData類型轉(zhuǎn)換器運(yùn)行時和設(shè)計時都需要本身是獨(dú)立的,不依賴于任何UI包(WinForm,WebForm)基類(如果控件本身沒有提供新的類型轉(zhuǎn)換器):System.ComponentModel.TypeConverter類型轉(zhuǎn)換器的實現(xiàn)一般情況下都比較簡單可以用TypeConverterAttribute得到一個控件的的TypeConverter的信息(qualifiedtypename)得到所有的屬性用TypeDescriptor.GetPropertiesExample:Size&SizeConverterExample:TypeConverters和屬性瀏覽器Property編輯器宿主的編輯界面PropertyBrowsersSystem.Drawing.Design.UITypeEditor被propertybrowser
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年高考語文一輪復(fù)習(xí)高中語文必修上理解性默寫(打印版)
- 部編版一年級語文下冊 期中考試卷(含答案)
- 手房房屋買賣合同答辯狀
- 服務(wù)器硬件故障應(yīng)急響應(yīng)
- 代養(yǎng)收養(yǎng)入住協(xié)議
- 農(nóng)業(yè)生產(chǎn)三農(nóng)村電商人才培養(yǎng)方案
- 網(wǎng)絡(luò)推廣策略效果統(tǒng)計表
- 安徽初一下數(shù)學(xué)試卷
- 門店承包租賃合同
- 三農(nóng)產(chǎn)品電商平臺數(shù)據(jù)挖掘與分析與應(yīng)用方案
- 前言 馬克思主義中國化時代化的歷史進(jìn)程與理論成果
- 思想道德與法治2023版教學(xué)設(shè)計第二章 追求遠(yuǎn)大理想 堅定崇高信念
- 21ZJ111 變形縫建筑構(gòu)造
- 電子商務(wù)概論目錄
- 裝修返工合同
- 高等數(shù)學(xué)考研輔導(dǎo)課(一)學(xué)習(xí)通超星課后章節(jié)答案期末考試題庫2023年
- 消力池砼施工工法
- 國家職業(yè)類別1-6類明細(xì)表
- 中國文藝美學(xué)要略·論著·《畫學(xué)心法問答》
- 如何建立卓越地價值觀
- 舞臺搭建方面基礎(chǔ)知識
評論
0/150
提交評論