成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

概述C#復(fù)合控件構(gòu)建

開發(fā) 后端
這里介紹C#復(fù)合控件構(gòu)建,這個控件的最后版本包含若干新的屬性:包括用來決定是否添加到一個列表中的項能夠被從另一個列表中刪除的屬性。

C#復(fù)合控件構(gòu)建

這個ListMover控件包含兩個EnhancedListBox控件,還有一些按鈕用于在兩個列表之間來回移動項。借助于這些C#復(fù)合控件構(gòu)建技術(shù),你可以學(xué)習(xí)如何創(chuàng)建子控。對于這個控件,你要注意的是某些事情必須發(fā)生的位置。

首先,借助于與在以前的控件中相同的技術(shù),你必須把在這個控件中需要的JavaScript代碼添加到OnInit事件的重載版本中。如你在上一個控件中所做的一樣,你也是使用JavaScript存取一個ListBox中的元素。而且,我已經(jīng)編制了函數(shù)分別實現(xiàn)把項添加到一個列表,從一個列表中刪除項,以及從一個列表中添加或刪除所有項。

我已經(jīng)進行了功能的分離,而不是創(chuàng)建單個“move”方法;這樣以來,我可以實現(xiàn)基于屬性設(shè)置而使得從一個列表中刪除項成為可選的。毫無疑問,這可以使最終的控件更為強壯些,但是我在本文中不再分析這些代碼。還應(yīng)該注意,就象在前面控件中一樣,我也添加了一個BuildItemList方法。

現(xiàn)在,你需要把這一客戶端代碼依附到復(fù)合控件的按鈕中。你可以在CreateChildControls方法的最后完成這一點;并且,在此時,完成子控件的初始化和構(gòu)建控件集合。在此,我僅向你展示相應(yīng)于一個按鈕的代碼(另外的按鈕代碼與此類似,省略)。

  1. string s_AddToLeft = "AddSelectedItemToList(document.all." +  
  2. this.lstItemsOnRight.ClientID + ", document.all."  
  3. + this.lstItemsOnLeft.ClientID + ", " +  
  4. (this.AllowDuplicatesOnLeft ? "true" : "false") + "); ";  
  5. string s_RemoveFromRight = "RemoveSelectedItemFromList(document.all." +  
  6. this.lstItemsOnRight.ClientID + "); ";  
  7. string s_BuildItemList = "BuildItemList(document.all." +  
  8. this.lstItemsOnRight.ClientID + ", document.all.__" + lstItemsOnRight.ClientID + ");
  9. " + "BuildItemList(document.all." + this.lstItemsOnLeft.ClientID + ", document.all.__"  
  10. + lstItemsOnLeft.ClientID + "); ";  
  11. this.btnAdd.Attributes.Add("onclick", s_AddToLeft  
  12. + " " + s_RemoveFromRight + " " + s_BuildItemList  
  13. + " return false");  

注意,我實現(xiàn)了在以前的控件中同樣的工作。我把JavaScript函數(shù)調(diào)用構(gòu)建成一字符串并且把它們依附到一個按鈕上。主要區(qū)別在于,既然這是一個包含其它控件的復(fù)合控件,那么你可能使用把代碼添加到onclick事件的Attributes.Add方法,這與在一個生成控件中把它放到一個棧上的方法形成對照。還要注意,我把多個功能放到onclick屬性中;而且,函數(shù)調(diào)用的最后返回false以便取消按鈕將執(zhí)行的任何回寄。

最后,代碼將在一個對Render重載的方法中初始化對客戶端函數(shù)BuildItemList的調(diào)用。這看起來很象我在 EnhancedListBox控件中向你介紹的那個,在此不再重復(fù)。注意,在這個控件中,我注冊了兩個隱藏的文本域,每一個相應(yīng)于一個ListBox。

  1. protected override void OnPreRender(EventArgs e)  
  2. {  
  3. base.OnPreRender(e);  
  4. if(Page != null)  
  5. {  
  6. Page.ClientScript.ReGISterHiddenField("__" + this.lstItemsOnRight.ClientID,  
  7. "");  
  8. Page.ClientScript.RegisterHiddenField("__" + this.lstItemsOnLeft.ClientID,  
  9. "");  
  10. Page.RegisterRequiresPostBack(this);  
  11. }  
  12. }  

現(xiàn)在,C#復(fù)合控件構(gòu)建成功,能夠提供一些客戶端JavaScript,并且把它綁定到按鈕上。與以前一樣,你可以把它放到一個表單上并且使用它;但是,在你添加同步代碼之前,它仍將會遇到你在第一個控件中所遇到的問題—你可以前后移動項,但是一旦你初始化一個回寄(通過表單上的任何其它控件),該控件就會恢復(fù)到它回寄之前的狀態(tài)。

為了修改這個問題,你要實現(xiàn)你在第一個控件中所做的同樣的工作。然而,既然你在開發(fā)一個復(fù)合控件,而不是擴展一個已經(jīng)現(xiàn)有的控件,那么你需要實現(xiàn)IPostBackDataHandler接口并且提供LoadPostData和 RaisePostDataChangedEvent方法的實現(xiàn)代碼。這些實現(xiàn)與前面的控件基本一致,除了你要實現(xiàn)兩個 EnhancedListBox控件中的項集合的同步而不是只考慮一個控件外。并且與以前一樣,你需要確保你保存你的SelectedIndex位置;這樣以來,在你完成項集合的同步后你就可以把它們設(shè)置回去。還要注意,在第一個控件中,你重載了基控件的LoadPostData方法,因此在某處調(diào)用了它的基類?,F(xiàn)在,既然你要從頭編寫一個復(fù)合控件,那么就沒有基類可調(diào)用,而僅需提供你自己的方法實現(xiàn)。

這個控件的最后版本包含若干新的屬性:包括用來決定是否添加到一個列表中的項能夠被從另一個列表中刪除的屬性(如果一個列表將允許出現(xiàn)重復(fù)項的話);它還包含可擴展的風(fēng)格化以實現(xiàn)最大化重用的目的,等等。

就這些。你已經(jīng)使用了可用于客戶端腳本中的隱藏的文本域來存儲列表框的狀態(tài)。在回寄期間,你使用隱藏文本域的內(nèi)容來與服務(wù)器端項集合重新同步。最終結(jié)果是一個漂亮的復(fù)合控件—允許你在沒有服務(wù)器回寄的情況下實現(xiàn)各列表項間的來回移動,而當(dāng)一個回寄真正發(fā)生時仍能夠保持這種變化。以上介紹C#復(fù)合控件構(gòu)建

【編輯推薦】

  1. 概述C# Cast
  2. 淺析C# switch和case
  3. C#托管資源和非托管資源
  4. 分析C# ListBox控件
  5. 簡單介紹C++ RAII
責(zé)任編輯:佚名 來源: 天極網(wǎng)
相關(guān)推薦

2009-08-21 17:55:52

C#復(fù)合控件

2009-08-24 10:10:09

C#復(fù)合控件

2009-08-19 14:15:42

C# 復(fù)合控件

2009-08-14 14:19:50

Enhanced LiC#構(gòu)建

2011-05-20 16:07:29

C#

2009-08-31 09:44:23

C# Employee

2009-09-03 11:15:38

C#設(shè)置Coopera

2009-07-31 14:08:54

C# 匿名函數(shù)

2009-08-18 17:29:02

C#使用指針

2009-08-13 15:18:23

C#文件上傳

2009-08-18 09:26:07

C#線程功能

2009-08-17 09:57:00

C# Windows

2009-08-20 16:28:45

C#匿名方法

2009-08-25 16:49:44

C#使用if語句

2009-09-03 10:42:16

C# Employee

2009-08-25 10:08:39

C# MyData對象

2009-08-24 18:09:13

C#構(gòu)造函數(shù)

2009-08-19 11:09:00

C# Cast<T>

2009-08-18 17:41:22

C# ListView

2009-08-11 14:45:41

C# DataGrid
點贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 在线播放国产一区二区三区 | 成人不卡视频 | 免费一级欧美在线观看视频 | 欧美在线色视频 | 久久国产精品免费一区二区三区 | 亚洲在线视频 | 天天狠狠| 91精品在线播放 | 天天天天操 | 日韩在线精品视频 | 91成人| 99久久精品一区二区成人 | 亚洲一区二区三区在线播放 | 亚洲精品一二三区 | 欧美激情精品久久久久久变态 | 99久久久久国产精品免费 | 久久精品电影 | 国产精品久久久久久久久图文区 | 国产精品亚洲精品 | 成人欧美一区二区三区在线观看 | 亚洲免费网站 | 国产一区免费 | 国产午夜精品久久久 | 一本久久a久久精品亚洲 | 91 在线 | 亚洲精品久久久久久下一站 | 四虎影院一区二区 | 操操操日日日 | 一级片在线视频 | 懂色中文一区二区在线播放 | 伊人伊人 | 欧美日韩国产在线 | 国产在线精品一区二区三区 | 一区二区福利视频 | 青青草综合 | 搞黄视频免费看 | 精品欧美一区二区三区免费观看 | 精品一二区 | 精品久久久久久久久久久久 | 久久丁香 | 看a网站|