• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看

      ?

      關(guān)于.net控件數(shù)組的探討

      2018-08-13 09:44:42胡建飛
      軟件 2018年7期
      關(guān)鍵詞:數(shù)組控件應(yīng)用程序

      胡建飛

      ?

      關(guān)于.net控件數(shù)組的探討

      胡建飛1,2

      (1. 中海油能源發(fā)展股份有限公司管道工程分公司,天津 300452;2. 海油發(fā)展珠海管道工程有限公司,廣東 珠海 519000)

      本文介紹了在VB.NET和ASP.NET中實(shí)現(xiàn)控件數(shù)組的方法,并介紹了一些控件數(shù)組的技巧。本文進(jìn)一步探討了.NET中不使用控件數(shù)組實(shí)現(xiàn)控件數(shù)組功能的方法,從中我們可以知道,.NET不使用控件數(shù)組的原因,進(jìn)一步了解在.NET中實(shí)現(xiàn)控件數(shù)組類似功能的方法,加深我們對(duì).NET控件集合概念的理解。

      .NET;控件數(shù)組

      0 引言

      從VB6時(shí)代走過來的程序員都習(xí)慣使用一種叫控件數(shù)組的編程方式,使用控件數(shù)組有以下作用:

      1、可以循環(huán)遍歷數(shù)組中所有控件。

      2、還可以動(dòng)態(tài)向程序添加新的控件。

      3、最主要的是可以讓多個(gè)控件響應(yīng)同一段代碼。

      但是到了.NET中我們發(fā)現(xiàn)習(xí)慣使用的控件數(shù)組被取消了,這讓從VB6過渡到.NET的程序員非常不適應(yīng),實(shí)際上.NET引入了控件集合模式,比控件數(shù)組更加靈活,使控件數(shù)組變得沒有必要。

      而且.NET并非完全取消了控件數(shù)組,通過一些技巧我們照樣可以建立控件數(shù)組,繼續(xù)使用習(xí)慣的編程方式,下面我們通過VB.NET和ASP.NET分別介紹在windows應(yīng)用程序編程和網(wǎng)頁編程中控件數(shù)組的實(shí)現(xiàn)。

      1 VB.NET應(yīng)用程序中建立控件數(shù)組的方法[1,2,3]

      我們先討論在windows應(yīng)用程序中使用控件數(shù)組的方法,以VB.net為例,我們要在窗口中動(dòng)態(tài)建立100個(gè)TextBox控件,代碼(VB語言)如下:

      Dim txt(323) As TextBox

      For i = 0 To 99

      txt(i) = New TextBox

      txt(i).Size = New Size(60, 21)

      txt(i).Tag = i.ToString

      Me.Controls.Add(txt(i))

      AddHandler txt(i).GotFocus, Ad-d-ressOf txt_gotfocus

      AddHandler txt(i).LostFocus, Ad-dressOf txt_lostfocus

      AddHandler txt(i).TextChanged, Ad-dressOf txt_changed

      AddHandler txt(i).KeyPress,

      AddressOf txt_keypress

      Next

      在上面的代碼中,我們建立了下標(biāo)從0到99的共100個(gè)TextBox,并把這100個(gè)TextBox使用Me.Controls.Add(txt(i))語句加入到窗口中,分別為每個(gè)TextBox 的GotFocus、LostFocus、TextChanged、KeyPress指定了執(zhí)行的代碼。

      2 VB.NET控件數(shù)組位置指定[4,5]

      這100個(gè)控件加入窗口后,并非按照我們想要的位置加入的,我們可以使用循環(huán)為每個(gè)TextBox指定位置,在應(yīng)用程序設(shè)計(jì)中,我們可以方便的使用location屬性設(shè)置控件的位置,例如我們要將這些控件每行20個(gè),排列5行,代碼如下:

      Dim y = 200

      Dim x = 10

      For i = 0 To 99

      txt(i).Location = New Point((i Mod 20) * 60 + x, y + (i 20) * 21

      Next

      其中x,y是第一個(gè)控件的坐標(biāo),我們可以通過設(shè)置x,y的值來調(diào)整這100個(gè)控件左上角位置。

      然后使用循環(huán)遍歷這100個(gè)控件,每行20個(gè),而控件的大小長(zhǎng)是60,高是21,通過New Point((i Mod 20) * 60 + x, y + (i 20) * 21 算式得出每個(gè)控件的位置,然后賦值給控件的location屬性。

      3 VB.NET控件數(shù)組下標(biāo)的取得[6,9]

      .NET中我們雖然可以建立控件數(shù)組,控件執(zhí)行代碼時(shí)我們可以通過sender得到執(zhí)行代碼的控件,但是通過sender我們無法像VB6中很方便得到下標(biāo),這里我們使用了一個(gè)小技巧,在前面我們建立控件數(shù)組時(shí)設(shè)置了一個(gè)tag屬性,這個(gè)tag屬性其實(shí)就是控件的一個(gè)備注,循環(huán)創(chuàng)建控件時(shí),我們將循環(huán)數(shù)字i轉(zhuǎn)換成字符串保存在tag屬性中,待我們想使用下標(biāo)時(shí)可以從tag屬性中取出,代碼如下:

      i = CType(sender.tag, Integer)

      4 ASP.NET控件數(shù)組的建立

      相比windows應(yīng)用程序,在ASP.NET中建立控件數(shù)組要復(fù)雜的多,下面以C#語言為例,在頁面中建立100個(gè)TextBox控件,代碼(C#語言)如下:

      TextBox[] TXT = new TextBox[100];

      for (int i =0; i <= 99; i++)

      {

      TXT[i] = new TextBox();

      Panel1 .Controls.Add(TXT[i]);

      TXT[i].ID = "T_" + i.ToString() ;

      TXT[i].TextChanged += new EventHandler (TextBox1_TextChanged);

      }

      通過以上代碼,我們動(dòng)態(tài)建立了100個(gè)TextBox控件,但是我們無法像windows應(yīng)用程序中那樣通過設(shè)置控件的坐標(biāo)來設(shè)置這100個(gè)控件的位置,這里我們?cè)陧撁嬷蟹湃胍粋€(gè)panel控件,然后將控件全部加入到panel控件,通過設(shè)置panel控件的位置來調(diào)整新加入控件的位置。

      5 ASP.NET中動(dòng)態(tài)建立控件數(shù)組特別注意事項(xiàng)

      我們一般理解ASP.NET中建立控件只需要加載一次即可,所以以上創(chuàng)建控件數(shù)組的代碼應(yīng)該也是運(yùn)行一次即可,如果這樣做運(yùn)行時(shí)就會(huì)出現(xiàn)了錯(cuò)誤,因?yàn)锳SP.NET中我們用戶自己動(dòng)態(tài)加載的控件每次頁面刷新時(shí)都要重新加載一次,這與我們大多人想象的不同。所以上面創(chuàng)建控件數(shù)組的代碼每次刷新頁面都要加載一次。

      控件每次更新頁面都重新加載,那里面輸入的數(shù)據(jù)怎么辦呢?這個(gè)不用我們管,服務(wù)器會(huì)通過ViewState對(duì)象把控件中的數(shù)據(jù)傳遞到更新后頁面的同名控件中。

      6 ASP.NET控件數(shù)組下標(biāo)的取得技巧[4,8,10]

      在ASP.NET中控件沒有tag屬性,所以我們不能像windows應(yīng)用程序中那樣使用這個(gè)屬性來保存下標(biāo)了。

      第一個(gè)方法是使用循環(huán)對(duì)所有控件做一個(gè)遍歷,將所有控件依次和sender進(jìn)行對(duì)比,找到相等的控件,從而得到下標(biāo),但這種方法比較耗費(fèi)資源。

      比較取巧的方法是建立控件數(shù)組時(shí)我們將每個(gè)控件的ID設(shè)置成T_0、T_1、T_2。。。的形式,之所以前面加了“T_”,是因?yàn)榭丶蘒D不能設(shè)置成純數(shù)字。

      在執(zhí)行代碼時(shí)可以通過下面的語句得到控件的下標(biāo):

      int i = Convert.ToInt16(((TextBox)sender). ID.Replace("T_", ""));

      7 綜合實(shí)戰(zhàn)演練---多維數(shù)組的建立與運(yùn)用[6,7]

      如圖1所示,我們要在頁面中建立100個(gè)TextBox控件,每行20個(gè),共5行。因?yàn)閳D中所示的排列原因,我們使用二維數(shù)組來建立會(huì)使代碼更加直觀,首先我們?cè)陧撁嬷型先胍粋€(gè)panel控件,命名為Panel1,創(chuàng)建控件的代碼如下:

      protected void Page_Load(object sender, EventArgs e)

      {

      Panel[] pp = new Panel[5];

      TextBox[,] TXT = new TextBox[20, 5];

      for (int i = 0; i <= 4; i++)

      {

      pp[i] = new Panel();

      Panel1.Controls.Add(pp[i]);

      for (int j = 0; j < 20; j++)

      {

      TXT[j, i] = new TextBox();

      pp[i].Controls.Add(TXT[j, i]);

      TXT[j, i].BorderWidth = 1;

      TXT[j, i].Width = 50;

      TXT[j, i].Height = 18;

      TXT[j, i].AutoPostBack = true;

      TXT[j, i].TextChanged += new EventHandler(TextBox1_TextChanged);

      TXT[j, i].Text = "";

      TXT[j, i].ID = "T_" + j.ToString() + "_" + i.ToString();

      }

      }

      }

      圖1 多維數(shù)組應(yīng)用

      在以上代碼中,在建立TextBox控件數(shù)組TXT的同時(shí),我們還建立了一個(gè)panel控件數(shù)組pp,作用是將100個(gè)TextBox分成5組,每組20個(gè)。

      根據(jù)循環(huán)TXT控件分別命名為T_0_0、T_1_0、T_2_0。。。T_19_4的形式,用以儲(chǔ)存控件的兩個(gè)下標(biāo)。在每個(gè)控件創(chuàng)建時(shí)設(shè)置了外觀屬性,并設(shè)置了TextChanged事件響應(yīng)的代碼。

      執(zhí)行代碼時(shí)如果要取得控件下標(biāo),可以使用如下代碼:

      string[] fstring = ((TextBox )sender).ID.Split(new char[] { '_' });

      int x = Convert.ToInt16(fstring[1]. ToString());

      int y = Convert.ToInt16(fstring[2]. ToString());

      因?yàn)榭丶蘒D是T_0_2的形式,使用“_”將控件ID分裂為字符串?dāng)?shù)組,則數(shù)組的第二項(xiàng)和第三項(xiàng)分別就是控件的兩個(gè)下標(biāo)。

      8 不使用數(shù)組在.NET中實(shí)現(xiàn)控件數(shù)組功能

      從老版本編程環(huán)境走過來的程序員通過一些技巧實(shí)現(xiàn)了控件數(shù)組,可以使用熟悉的方式來寫代碼,但.NET為何要取消控件數(shù)組呢?我們開始提到使用控件數(shù)組主要有3個(gè)原因:

      第一,可以對(duì)數(shù)組中所有控件進(jìn)行遍歷。但.NET引入了控件集合的概念,我們可以使用foreach語句對(duì)頁面或某個(gè)容器中的控件進(jìn)行遍歷。

      第二,可以動(dòng)態(tài)添加新控件。在.NET中我們可以動(dòng)態(tài)向頁面或容器中添加新的控件,與控件是不是某個(gè)數(shù)組的元素?zé)o關(guān)。

      第三,多個(gè)控件執(zhí)行同一代碼。這點(diǎn)在VB6時(shí)代只能通過控件數(shù)組來實(shí)現(xiàn),也是控件數(shù)組存在的主要原因,然而.NET中每個(gè)控件的每個(gè)事件響應(yīng)的代碼都可以單獨(dú)指定,多個(gè)控件執(zhí)行同一代碼在.NET中根本無需控件數(shù)組。

      控件數(shù)組還有個(gè)用處便是下標(biāo),但是我們?cè)谏厦娴睦又?,完全可以使用控件名稱來得到和下標(biāo)同樣的作用。

      控件數(shù)組可以通過下標(biāo)指定某一個(gè)控件,在.NET中可以使用this.FindControl語句通過控件名稱來指定某個(gè)控件。

      從上我們可以得出結(jié)論,在.NET中不使用控件數(shù)組依然可以實(shí)現(xiàn)所有控件數(shù)組的功能,這也是.NET在明面上取消了控件數(shù)組的原因,只要我們耐心學(xué)習(xí),慢慢習(xí)慣就能適應(yīng)。

      9 結(jié)語

      .NET并非完全取消了控件數(shù)組,通過一些技巧我們依然可以實(shí)現(xiàn)控件數(shù)組,但是.NET已經(jīng)可以不使用數(shù)組概念實(shí)現(xiàn)全部控件數(shù)組的功能。

      通過對(duì)控件數(shù)組的探討,我們可以加深對(duì).NET控件集合概念的理解。隨著編程技術(shù)的進(jìn)步,程序員也要與時(shí)俱進(jìn),不斷更新自己才能跟上時(shí)代。

      [1] 龐婭娟, 房大偉, 呂雙. ASP.NET從入門到精通, 清華大學(xué)出版社.

      [2] JavaScript從入門到精通, 清華大學(xué)出版社.

      [3] 蔣順業(yè). ASP.NET應(yīng)用程序開發(fā)軟件設(shè)計(jì)與應(yīng)用研究[J]. 軟件, 2017, 37(10): 95-97.

      [4] 蘭洋, 蔣順業(yè). 基于asp.net 的FMS 生產(chǎn)管理系統(tǒng)[J]. 軟件, 2013, 34(5): 76-78.

      [5] 余翠蘭. 基于ASP.NET 的學(xué)生住宿管理系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[J]. 軟件, 2014, 35(4): 37-41.

      [6] 賈志先. 袁芳. 基于ASP.NET 數(shù)據(jù)分頁導(dǎo)航的設(shè)計(jì)與應(yīng)用[J]. 軟件, 2015, 36(12): 60-62.

      [7] 周瑞. 從零開始學(xué)JavaScript, 電子工業(yè)出版社.

      [8] VB.NET 2005程序設(shè)計(jì)從入門到精通, 人民郵電出版社.

      [9] Java從入門到精通, 清華大學(xué)出版社.

      [10] 袁芳. 教學(xué)做一體化ASP.NET 課程教學(xué)改革與實(shí)踐[J]. 軟件, 2014, 35(11): 126-128.

      A Discussion on the Array of .NET Controls

      HU Jian-fei1,2

      (1. CNOOC Energy Technology and Services-Pipe Engineering Co., Ltd, Tianjin 300452; 2. CNOOC Energy Technology & Services Zhuhai Pipe Engineering Co., Ltd, Zhuhai 519000)

      This paper introduces the method of realizing control array in VB.NET and ASP.NET, and introduces some skills of control array. In this paper, we further discuss the method of realizing the function of the array of controls in .NET without using a control array. From this, we can know the reason that .NET does not use the array of controls, and further understands the method of realizing the similar function of the control array in .NET, and deepens our understanding of the idea of the collection of .NET controls.

      .NET; Array of controls

      TP311.52

      B

      10.3969/j.issn.1003-6970.2018.07.021

      胡建飛(1979-),男,本科,工程師,管道涂敷數(shù)據(jù),ASP.NET編程。

      本文著錄格式:胡建飛. 關(guān)于.net控件數(shù)組的探討[J]. 軟件,2018,39(7):103-105

      猜你喜歡
      數(shù)組控件應(yīng)用程序
      JAVA稀疏矩陣算法
      JAVA玩轉(zhuǎn)數(shù)學(xué)之二維數(shù)組排序
      刪除Win10中自帶的應(yīng)用程序
      尋找勾股數(shù)組的歷程
      ASP.NET服務(wù)器端驗(yàn)證控件的使用
      電子世界(2014年12期)2014-10-21 11:09:39
      關(guān)閉應(yīng)用程序更新提醒
      電腦迷(2012年15期)2012-04-29 17:09:47
      VB數(shù)組在for循環(huán)中的應(yīng)用
      考試周刊(2012年88期)2012-04-29 04:36:47
      就這樣玩會(huì)VBA中常見的自定義控件
      電腦迷(2012年24期)2012-04-29 00:44:03
      三星電子將開設(shè)應(yīng)用程序下載商店
      微軟軟件商店開始接受應(yīng)用程序
      苍溪县| 鞍山市| 稻城县| 乌苏市| 阿尔山市| 阿克苏市| 新干县| 潼关县| 从江县| 昔阳县| 石门县| 延安市| 石屏县| 通渭县| 东平县| 会同县| 景德镇市| 株洲市| 疏附县| 巴彦县| 翼城县| 合山市| 鄂托克前旗| 汾西县| 玛曲县| 木兰县| 青岛市| 永嘉县| 玉树县| 济南市| 齐齐哈尔市| 阿拉善盟| 伊通| 卓尼县| 徐汇区| 合山市| 红原县| 定安县| 遂溪县| 甘泉县| 柘荣县|