版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
DEV414:WindowsForms進(jìn)階:寫一個(gè)定制控件顧問咨詢部Microsoft(China)內(nèi)容WindowsFormsFrameworkWindowsForms&GDI+編寫一個(gè)例子控件-(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è)計(jì)模式豐富的,可擴(kuò)展的設(shè)計(jì)時(shí)支持簡潔!沒有一大堆的頭文件,IDL,libs,
obj,等等.Web感知的,data感知的真正的,豐富的運(yùn)行時(shí)類型信息WindowsForms繼承關(guān)系ComponentStandardIComponentImplControlBasicHWNDWrapperTimerButtonBaseListViewScrollableControlListControlButtonCheckBoxRadioButtonContainerControlUserControlDesignableFormTopLevelWindowComboBoxListBoxComponentAndIComponentComponent對IComponent接口進(jìn)行了標(biāo)準(zhǔn)的實(shí)現(xiàn)IComponent包含一個(gè)Site屬性,Site是Component和Container之間的通信接口提供一個(gè)Events屬性-包含所有連接到該組件的事件處理者Control–
WindowsForms的核心Control包含窗口句柄(HWNDwrapper)處理主要的一些窗口消息(WM_*)為用戶的輸入,描繪和布局提供一些事件包裝ActiveX負(fù)責(zé)句柄的創(chuàng)建和重建通過Handle屬性暴露HWND如果HWND不存在,在訪問該屬性時(shí)會(huì)立刻建立一個(gè)如果重載WndProc()方法,那么可以處理任何窗口消息訪問底層系統(tǒng)WndProc的例子:privateconstintWM_COMPACTING=0x041;protectedoverridevoidWndProc(refMessagem){ case(m.msg){ caseWM_COMPACTING: OnCompacting(); break; } base.WndProc(m); }ScrollableControl
AndContainerControlScrollableControlControl支持自動(dòng)滾動(dòng)(AutoScroll,VScroll,HScroll)AutoScrollMargin,AutoScrollMinSize屬性定義滾動(dòng)的范圍等信息ContainerControl實(shí)現(xiàn)一個(gè)Control的容器管理控件的焦點(diǎn)(Tab)-本身不接受焦點(diǎn)實(shí)現(xiàn)所有ScrollableControl的功能支持布局(Dock,Anchor)DemoRootDesignableTypes:UserControlAndFormUserControl組合控件的基類型(ComboBox)自定義控件的基類型FormWindowsForms頂層控件提供一些屬性來操作Systemmenu,minimize/maximize按鈕,菜單等使用GDI+Drawing類的基類是System.Drawing.Graphics可以從Control.Paint事件的參數(shù)獲得,或者用Control.CreateGraphics建立和HDC類似對象在結(jié)束使用時(shí)自動(dòng)清理(GC),但是最好手工調(diào)用Dispose。(Win9x平臺(tái)必須手工處理!)有很多系統(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+操作畫一個(gè)綠色的圓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來實(shí)現(xiàn)事件實(shí)現(xiàn)事件要有三樣?xùn)|西(Control)一個(gè)類封裝了事件要傳遞的數(shù)據(jù)AlarmEventArgs一個(gè)事件的delegateAlarmEventHandler一個(gè)產(chǎn)生事件的類(你的Control)一個(gè)事件聲明publiceventAlarmEventHandlerAlarm;一個(gè)方法來產(chǎn)生事件protectedvirtualvoidOnAlarm
(AlarmEventArgse){if(Alarm!=null)Alarm(this,e);}用Delegate來實(shí)現(xiàn)事件PublicSubOnClick(ByValsenderasObject, ByValeasEventArgs)Handles Button1.Click ‘DosomethingEndSubVB用戶的用法實(shí)現(xiàn)一個(gè)Control我們要做一個(gè)鬧鐘控件從Control派生第一步,我們實(shí)現(xiàn)它的運(yùn)行時(shí)的功能,第二步添加一些設(shè)計(jì)時(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)
如果你希望基類為你畫點(diǎn)什么畫一個(gè)鬧鐘
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動(dòng)態(tài)Collection屬性應(yīng)該實(shí)現(xiàn)System.Collections.IList接口(Item(Indexer))Collection永遠(yuǎn)不要返回NULL,可以返回一個(gè)空的Collection!加一個(gè)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í)和設(shè)計(jì)時(shí)都需要本身是獨(dú)立的,不依賴于任何UI包(WinForm,WebForm)基類(如果控件本身沒有提供新的類型轉(zhuǎn)換器):System.ComponentModel.TypeConverter類型轉(zhuǎn)換器的實(shí)現(xiàn)一般情況下都比較簡單可以用TypeConverterAttribute得到一個(gè)控件的的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)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 專業(yè)軟件銷售協(xié)議條款范本(2024年度)版B版
- 2025年度快遞業(yè)務(wù)運(yùn)費(fèi)標(biāo)準(zhǔn)合同范本3篇
- 北京市中考語文模擬試卷二套【附參考答案】
- 3 認(rèn)識(shí)方向(說課稿)-2023-2024學(xué)年二年級上冊數(shù)學(xué) 蘇教版
- 2024招投標(biāo)法規(guī)與協(xié)議管理實(shí)務(wù)操作指南版
- 2024毛竹山竹林碳匯項(xiàng)目承包合作協(xié)議3篇
- 16《新年的禮物》第一課時(shí)(說課稿)-2023-2024學(xué)年道德與法治一年級上冊統(tǒng)編版
- 2024版買賣合同協(xié)議書
- 4 說說我們的學(xué)校(說課稿)2024-2025學(xué)年統(tǒng)編版道德與法治三年級上冊
- 醫(yī)院內(nèi)分泌科改善護(hù)理服務(wù)行動(dòng)用“心”控糖 共筑健康
- 自愿放棄證明書怎么寫
- 成都市數(shù)學(xué)八年級上冊期末試卷含答案
- 危重癥患者轉(zhuǎn)運(yùn)指南-課件
- 沖壓模具設(shè)計(jì)-沖壓模具設(shè)計(jì)
- 2023人才培養(yǎng)方案調(diào)查問卷
- 江蘇省2023年生物小高考試題含答案解析
- 八年級上冊地理全冊知識(shí)點(diǎn)總結(jié)
- 高等激光技術(shù)1
- GB/T 25786-20102-氨基-4-乙酰氨基苯甲醚
- 醫(yī)院崗位廉政風(fēng)險(xiǎn)點(diǎn)查找和防控措施表(樣本)
- 2023年包裝車間年終工作總結(jié)
評論
0/150
提交評論