C#.NET中動(dòng)態(tài)添加與刪除控件_第1頁(yè)
C#.NET中動(dòng)態(tài)添加與刪除控件_第2頁(yè)
C#.NET中動(dòng)態(tài)添加與刪除控件_第3頁(yè)
C#.NET中動(dòng)態(tài)添加與刪除控件_第4頁(yè)
C#.NET中動(dòng)態(tài)添加與刪除控件_第5頁(yè)
已閱讀5頁(yè),還剩5頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、C#.NET中動(dòng)態(tài)添加與刪除控件數(shù)組為共享公用功能的一組控件一起工作提供了便捷的途徑。例如,一組控件可能用于顯示相關(guān)的數(shù)據(jù),或者在被點(diǎn)擊時(shí)提供相關(guān)的行為。C#本身并不支持控件數(shù)組的建立,但是你可以通過(guò)編程復(fù)制控件數(shù)組的所有功能。本文介紹復(fù)制控件數(shù)組功能的簡(jiǎn)單組件的建立??丶?shù)組的主要用處有:1 ,使用相同的名稱與索引訪問(wèn)一組控件,允許用編號(hào)檢索和設(shè)置數(shù)據(jù)項(xiàng)并且在整個(gè)數(shù)組中重復(fù)。這個(gè)功能可以使用下面的代碼實(shí)現(xiàn)。偽代碼myControlmyIndex.MyProperty=myValue;myControlmyIndex+1.MyMethod2,多個(gè)對(duì)象使用同一個(gè)事件處理程序(eventhandl

2、er)處理事件,在這些事件中檢索和使用索引,代碼如下:偽代碼privatevoidmyControl_Click(System.Objectsender,System.EventArgse)Messagebox.Show("YouhaveclickedMyControlnumber"+myControl.Index);3,在運(yùn)行時(shí)動(dòng)態(tài)添加或者刪除控件,代碼如下:偽代碼for(inti=1;i<6;i+)/插入代碼來(lái)建立控件并給屬性賦值C#允許你復(fù)制與控件數(shù)組相關(guān)的一些功能。例如,你能使用委托把多個(gè)對(duì)象的事件綁定到一個(gè)事件處理程序。但是,如果把這些功能合并到一個(gè)動(dòng)態(tài)的、

3、容易管理的組件中更加簡(jiǎn)便。本文將建立有下面特性的組件: 建立索引和排序控件的集合。將使用按鈕集合來(lái)演示。 一個(gè)事件處理程序來(lái)處理衍生的按鈕的點(diǎn)擊事件。 使用索引引用控件和成員的代碼。 給窗體動(dòng)態(tài)添加和刪除控件的代碼。建立項(xiàng)目在本節(jié)中將建立并命名一個(gè)項(xiàng)目,并給該項(xiàng)目添加一個(gè)類。該類將封裝實(shí)現(xiàn)控件數(shù)組的代碼。1、選擇File->New->Project菜單打開NewProject對(duì)話框。2、從VisualC#項(xiàng)目列表中選擇WindowsApplication項(xiàng)目模版,在Name框中輸入ButtonArrayProject。3、選擇File->SaveAll保存項(xiàng)目。實(shí)現(xiàn)一個(gè)集合B

4、uttonArray類會(huì)處理通過(guò)一個(gè)集合的實(shí)現(xiàn)來(lái)保存和組織控件數(shù)組的事務(wù)。集合是包含索引對(duì)象變量列表的對(duì)象,也包含add、remove等方法和其它的操作對(duì)象。本節(jié)中將建立一個(gè)繼承自System.Collections.CollectionBase(.NET框架組件中提供必要的集合功能的類)的類,并實(shí)現(xiàn)提供必要功能的方法。建立繼承類的過(guò)程:1、從Project菜單中選擇AddClass。2、根據(jù)情況把類命名為ButtonArray.cs。類的代碼編輯器將打開。3、在類的聲明中,指定它繼承自.NET框架組件的System.Collections.CollectionBase類。publicclas

5、sButtonArray:System.Collections.CollectionBase/省略了設(shè)計(jì)者增加的代碼System.Collections.CollectionBase類為集合提供了很多必要的功能。其中包括一個(gè)跟蹤集合中對(duì)象的List對(duì)象,維護(hù)集合中當(dāng)前對(duì)象數(shù)量的Count屬性,允許刪除特定位置索引的對(duì)象的RemoveAt方法。在實(shí)現(xiàn)控件數(shù)組集合時(shí)會(huì)使用到它們。因?yàn)槊總€(gè)控件數(shù)組與一個(gè)窗體關(guān)聯(lián),索引必須添加一個(gè)字段來(lái)保存該窗體的引用。通過(guò)建立私有的、只讀字段來(lái)保存引用,可以保證每個(gè)控件數(shù)組組件只與以一個(gè)窗體關(guān)聯(lián)。為組件建立私有、只讀字段立即給類聲明添加下面的代碼:privatere

6、adonlySystem.Windows.Forms.FormHostForm;在集合中實(shí)現(xiàn)的第一個(gè)方法是AddNewButton。該方法建立一個(gè)新的按鈕控件并把它添加到目標(biāo)窗體。你也可以使用該方法為新按鈕設(shè)置初始屬性。實(shí)現(xiàn)AddNewButton方法在ButtonArray類的代碼編輯器中輸入下面的代碼:publicSystem.Windows.Forms.ButtonAddNewButton。/為Button類建立新的實(shí)例System.Windows.Forms.ButtonaButton=newSystem.Windows.Forms.Button。;/將該按鈕添加到集合的內(nèi)部列表thi

7、s.List.Add(aButton);/把控件集合中的按鈕添加到被HostForm字段引用的窗體HostForm.Controls.Add(aButton);/設(shè)置該按鈕對(duì)象的初始屬性aButton.Top=Count*25;aButton.Left=100;aButton.Tag=this.Count;aButton.Text="Button"+this.Count.ToString();returnaButton;上面的方法的功能是:1、建立一個(gè)新按鈕。2、把它添加到內(nèi)部列表和HostForm引用的窗體的控件集合。3、設(shè)置初始屬性,包括設(shè)置Tag屬性來(lái)索引該按鈕。你可

8、以在這一段中添加代碼為控件設(shè)置更多的屬性。4、返回新按鈕,這樣它就能立即被修改并指定給其它的對(duì)象引用。你必須建立一個(gè)構(gòu)造函數(shù)(組件被初始化時(shí)運(yùn)行的方法),當(dāng)控件數(shù)組類的一個(gè)新實(shí)例被建立時(shí),它用來(lái)設(shè)置HostForm字段的值并把新按鈕添加到窗體。可以使用下面的方式達(dá)到這個(gè)目的。建立構(gòu)造函數(shù)為類建立構(gòu)造函數(shù)。/使用下面的構(gòu)造函數(shù)代替默認(rèn)的構(gòu)造函數(shù)publicButtonArray(System.Windows.Forms.Formhost)HostForm=host;this.AddNewButton();構(gòu)造函數(shù)需要一個(gè)參數(shù),即放置按鈕數(shù)組的窗體。它把該值指定給HostForm字段,接著類的Ad

9、dNewButton方法給窗體添加一個(gè)新按鈕。暴露控件數(shù)組現(xiàn)在已經(jīng)建立了建立和跟蹤數(shù)組中控件的途徑,但是還必須把它們暴露給開發(fā)者??梢酝ㄟ^(guò)屬性實(shí)現(xiàn)這個(gè)功能。我們將建立一個(gè)默認(rèn)索引器基于特定按鈕的索引返回它的引用。這樣你就能編程使用典型控件數(shù)組中的MyButtonArray(myIndex)語(yǔ)法了。建立默認(rèn)屬性給組件添加下面的代碼:publicSystem.Windows.Forms.ButtonthisintIndexgetreturn(System.Windows.Forms.Button)this.ListIndex;實(shí)現(xiàn)Remove方法現(xiàn)在已經(jīng)建立了暴露數(shù)組中按鈕的屬性,可以建立從數(shù)組中

10、刪除按鈕的機(jī)制了。為了從數(shù)組中刪除一個(gè)按鈕,必須從集合的內(nèi)部List對(duì)象和窗體的Controls集合中刪除它。給組件添加下面的方法:publicvoidRemove()/檢查以確保有按鈕可以刪除if(this.Count>0)從主窗體上的控件集合的數(shù)組按鈕數(shù)組中刪除最后一個(gè)注意在訪問(wèn)數(shù)組時(shí)使用了默認(rèn)屬性HostForm.Controls.Remove(thisthis.Count-1);this.List.RemoveAt(this.Count-1);)建立公用事件處理程序最后一步是為控件數(shù)組建立事件處理程序來(lái)處理公用的事件。在演示中,將為按鈕的點(diǎn)擊事件建立一個(gè)方法,接著添加代碼把該事件

11、與事件處理程序關(guān)聯(lián)。建立公用事件處理程序給組件添加下面的方法:publicvoidClickHandler(Objectsender,System.EventArgse)System.Windows.Forms.MessageBox.Show("Youhaveclickedbutton"+(System.Windows.Forms.Button)sender).Tag.ToString();)該方法通過(guò)檢索存儲(chǔ)在按鈕的Tag屬性的索引,顯示一個(gè)消息框表明哪個(gè)按鈕被點(diǎn)擊了。該方法的參數(shù)與被處理事件的相同,對(duì)于事件處理程序是必要的。你也必須把該事件與事件處理程序關(guān)聯(lián)。把該事件與

12、事件處理程序關(guān)聯(lián)給AddNewButton方法添加下面的代碼:aButton.Click+=newSystem.EventHandler(ClickHandler);測(cè)試該項(xiàng)目現(xiàn)在組件已經(jīng)完成了,需要建立一個(gè)應(yīng)用程序來(lái)測(cè)試該組件。建立測(cè)試應(yīng)用程序1、在解決方案管理器中,右鍵點(diǎn)擊Form1并從彈出菜單中選擇ViewDesigner。Form1的設(shè)計(jì)器被打開了。2、給窗體添加兩個(gè)按鈕。3、把這些按鈕的位置調(diào)整到窗體的右側(cè)。4、設(shè)置這些按鈕的屬性:按鈕NameTextButton1btnAddAddButtonButton2btnRemoveRemoveButton5、在解決方案管理器中,右鍵點(diǎn)擊F

13、orm1并從彈出菜單中選擇ViewCode。Form1的代碼編輯器被打開了。6、在Form1的類聲明中,聲明下面的控件數(shù)組對(duì)象:/聲明新的ButtonArray對(duì)象ButtonArrayMyControlArray;7、在窗體的構(gòu)造函數(shù)中,在方法結(jié)尾前添加下面的代碼:MyControlArray=newButtonArray(this);該語(yǔ)句建立了一個(gè)新的ButtonArray對(duì)象。它的參數(shù)this指向建立新ButtonArray的窗體,將成為放置按鈕數(shù)組的窗體。8、在解決方案管理器中,右鍵點(diǎn)擊Form1并從彈出菜單中選擇ViewDesigner。9、在設(shè)計(jì)器中雙擊btnAdd來(lái)打開btnA

14、dd_Click事件的代碼編輯器。10、在方法btnAdd_Click中添加代碼調(diào)用MyControlArray的AddNewButton方法:/調(diào)用MyControlArray的AddNewButton方法MyControlArray.AddNewButton();/改變Button0的BackColor屬性MyControlArray0.BackColor=System.Drawing.Color.Red;11、在解決方案管理器中,右鍵點(diǎn)擊Form1并從彈出菜單中選擇ViewDesigner。12、在設(shè)計(jì)器中雙擊btnRemove來(lái)打開btnRemove_Click事件的代碼編輯器。13、

15、在btnRemove_Click方法中添加下面的代碼:/調(diào)用MyControlArray的Remove方法MyControlArray.Remove();14、保存項(xiàng)目測(cè)試該項(xiàng)目1、從Debug菜單中選擇Start。Form1窗體被打開,上面有三個(gè)按鈕,標(biāo)簽分別是AddButton、RemoveButton和Button1。2、點(diǎn)擊Button1。顯示了一個(gè)消息框,消息框正確地顯示了索引。3、點(diǎn)擊幾次AddButton按鈕。每次點(diǎn)擊會(huì)給窗體添加一個(gè)新按鈕。點(diǎn)擊任何一個(gè)新按鈕將導(dǎo)致一個(gè)正確顯示該按鈕索引的消息框。注意Button0的顏色改變?yōu)榧t色,是btnAdd_Click事件中下面一行的結(jié)果:

16、MyControlArray(0).BackC010r=System.Drawing.Color.Red4、點(diǎn)擊幾次RemoveButton按鈕。每次點(diǎn)擊時(shí)從窗體上刪除一個(gè)按鈕。5、點(diǎn)擊RemoveButton按鈕直到窗體右側(cè)的所有按鈕都被刪除為止。6、再次點(diǎn)擊AddButton按鈕。按鈕再次添加到窗體并且索引的編號(hào)正確。結(jié)論本文演示了怎樣建立封裝控件數(shù)組功能的組件。你可以看到怎樣建立方法來(lái)動(dòng)態(tài)地給窗體添加和刪除控件,怎樣通過(guò)默認(rèn)屬性或者索引器暴露對(duì)象。上面的代碼已經(jīng)實(shí)現(xiàn)了所有的功能,還可以通過(guò)為組件編寫自定義代碼來(lái)擴(kuò)展控件數(shù)組。代碼:form1.csusingSystem;usingSyst

17、em.Drawing;usingSystem.Collections;usingSystem.ComponentModel;usingSystem.Windows.Forms;usingSystem.Data;namespaceDAddControl/<summary>/Form1的摘要說(shuō)明。/summarypublicclassForml:System.Windows.Forms.FormprivateSystem.Windows.Forms.ButtonbtnAdd;privateSystem.Windows.Forms.ButtonbtnRemove;ButtonArrayM

18、yControlArray;/<summary>/必需的設(shè)計(jì)器變量。/</summary>privateSystem.ComponentModel.Containercomponents=null;publicForm1()/Windows窗體設(shè)計(jì)器支持所必需的/InitializeComponent();/TODO:在InitializeComponent調(diào)用后添加任何構(gòu)造函數(shù)代碼/MyControlArray=newButtonArray(this);)/<summary>/清理所有正在使用的資源。/summaryprotectedoverridevoi

19、dDispose(booldisposing)if(disposing)if(components!=null)components.Dispose();)base.Dispose(disposing);)#regionWindows窗體設(shè)計(jì)器生成的代碼/<summary>/設(shè)計(jì)器支持所需的方法-不要使用代碼編輯器修改/此方法的內(nèi)容。/</summary>privatevoidInitializeComponent()(this.btnAdd=newSystem.Windows.Forms.Button();this.btnRemove=newSystem.Window

20、s.Forms.Button();this.SuspendLayout();/btnAdd/this.btnAdd.Location=newSystem.Drawing.Point(216,0);this.btnAdd.Name="btnAdd"this.btnAdd.TabIndex=0;this.btnAdd.Text="AddButton"this.btnAdd.Click+=newSystem.EventHandler(this.btnAdd_Click);/btnRemove/this.btnRemove.Location=newSystem.

21、Drawing.Point(216,240);this.btnRemove.Name="btnRemove"this.btnRemove.TabIndex=1;this.btnRemove.Text="RemoveButton"this.btnRemove.Click+=newSystem.EventHandler(this.btnRemove_Click);/Form1/this.AutoScaleBaseSize=newSystem.Drawing.Size(6,14);this.ClientSize=newSystem.Drawing.Size(2

22、92,266);this.Controls.Add(this.btnRemove);this.Controls.Add(this.btnAdd);this.Name="Form1"this.Text="Form1"this.ResumeLayout(false);#endregion/<summary>/應(yīng)用程序的主入口點(diǎn)。/</summary>STAThreadstaticvoidMain()(Application.Run(newForm1();)privatevoidbtnAdd_Click(objectsender,Sys

23、tem.EventArgse)(/調(diào)用MyControlArray的AddNewButton方法MyControlArray.AddNewButton();/改變Button0的BackColor屬性MyControlArray0.BackC010r=System.Drawing.Color.Red;)privatevoidbtnRemove_Click(objectsender,System.EventArgse)(MyControlArray.Remove();)ButtonArray.csusingSystem;usingSystem.Windows.Forms;namespaceDAd

24、dControl(/<summary>/ButtonArray的摘要說(shuō)明。/</summary>publicclassButtonArray:System.Collections.CollectionBase(privatereadonlySystem.Windows.Forms.FormHostForm;publicButtonArray()(/TODO:在此處添加構(gòu)造函數(shù)邏輯/)publicButtonArray(System.Windows.Forms.Formhost)(HostForm=host;/this.AddNewButton();)publicSystem.Windows.Forms.ButtonAddNewButton()(/為Button類建立新的實(shí)例S

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論