999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

關于.net控件數組的探討

2018-08-13 09:44:42胡建飛
軟件 2018年7期
關鍵詞:頁面設置

胡建飛

?

關于.net控件數組的探討

胡建飛1,2

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

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

.NET;控件數組

0 引言

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

1、可以循環遍歷數組中所有控件。

2、還可以動態向程序添加新的控件。

3、最主要的是可以讓多個控件響應同一段代碼。

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

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

1 VB.NET應用程序中建立控件數組的方法[1,2,3]

我們先討論在windows應用程序中使用控件數組的方法,以VB.net為例,我們要在窗口中動態建立100個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

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

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

這100個控件加入窗口后,并非按照我們想要的位置加入的,我們可以使用循環為每個TextBox指定位置,在應用程序設計中,我們可以方便的使用location屬性設置控件的位置,例如我們要將這些控件每行20個,排列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是第一個控件的坐標,我們可以通過設置x,y的值來調整這100個控件左上角位置。

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

3 VB.NET控件數組下標的取得[6,9]

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

i = CType(sender.tag, Integer)

4 ASP.NET控件數組的建立

相比windows應用程序,在ASP.NET中建立控件數組要復雜的多,下面以C#語言為例,在頁面中建立100個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);

}

通過以上代碼,我們動態建立了100個TextBox控件,但是我們無法像windows應用程序中那樣通過設置控件的坐標來設置這100個控件的位置,這里我們在頁面中放入一個panel控件,然后將控件全部加入到panel控件,通過設置panel控件的位置來調整新加入控件的位置。

5 ASP.NET中動態建立控件數組特別注意事項

我們一般理解ASP.NET中建立控件只需要加載一次即可,所以以上創建控件數組的代碼應該也是運行一次即可,如果這樣做運行時就會出現了錯誤,因為ASP.NET中我們用戶自己動態加載的控件每次頁面刷新時都要重新加載一次,這與我們大多人想象的不同。所以上面創建控件數組的代碼每次刷新頁面都要加載一次。

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

6 ASP.NET控件數組下標的取得技巧[4,8,10]

在ASP.NET中控件沒有tag屬性,所以我們不能像windows應用程序中那樣使用這個屬性來保存下標了。

第一個方法是使用循環對所有控件做一個遍歷,將所有控件依次和sender進行對比,找到相等的控件,從而得到下標,但這種方法比較耗費資源。

比較取巧的方法是建立控件數組時我們將每個控件的ID設置成T_0、T_1、T_2。。。的形式,之所以前面加了“T_”,是因為控件ID不能設置成純數字。

在執行代碼時可以通過下面的語句得到控件的下標:

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

7 綜合實戰演練---多維數組的建立與運用[6,7]

如圖1所示,我們要在頁面中建立100個TextBox控件,每行20個,共5行。因為圖中所示的排列原因,我們使用二維數組來建立會使代碼更加直觀,首先我們在頁面中拖入一個panel控件,命名為Panel1,創建控件的代碼如下:

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 多維數組應用

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

根據循環TXT控件分別命名為T_0_0、T_1_0、T_2_0。。。T_19_4的形式,用以儲存控件的兩個下標。在每個控件創建時設置了外觀屬性,并設置了TextChanged事件響應的代碼。

執行代碼時如果要取得控件下標,可以使用如下代碼:

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

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

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

因為控件ID是T_0_2的形式,使用“_”將控件ID分裂為字符串數組,則數組的第二項和第三項分別就是控件的兩個下標。

8 不使用數組在.NET中實現控件數組功能

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

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

第二,可以動態添加新控件。在.NET中我們可以動態向頁面或容器中添加新的控件,與控件是不是某個數組的元素無關。

第三,多個控件執行同一代碼。這點在VB6時代只能通過控件數組來實現,也是控件數組存在的主要原因,然而.NET中每個控件的每個事件響應的代碼都可以單獨指定,多個控件執行同一代碼在.NET中根本無需控件數組。

控件數組還有個用處便是下標,但是我們在上面的例子中,完全可以使用控件名稱來得到和下標同樣的作用。

控件數組可以通過下標指定某一個控件,在.NET中可以使用this.FindControl語句通過控件名稱來指定某個控件。

從上我們可以得出結論,在.NET中不使用控件數組依然可以實現所有控件數組的功能,這也是.NET在明面上取消了控件數組的原因,只要我們耐心學習,慢慢習慣就能適應。

9 結語

.NET并非完全取消了控件數組,通過一些技巧我們依然可以實現控件數組,但是.NET已經可以不使用數組概念實現全部控件數組的功能。

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

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

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

[3] 蔣順業. ASP.NET應用程序開發軟件設計與應用研究[J]. 軟件, 2017, 37(10): 95-97.

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

[5] 余翠蘭. 基于ASP.NET 的學生住宿管理系統的設計與實現[J]. 軟件, 2014, 35(4): 37-41.

[6] 賈志先. 袁芳. 基于ASP.NET 數據分頁導航的設計與應用[J]. 軟件, 2015, 36(12): 60-62.

[7] 周瑞. 從零開始學JavaScript, 電子工業出版社.

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

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

[10] 袁芳. 教學做一體化ASP.NET 課程教學改革與實踐[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-),男,本科,工程師,管道涂敷數據,ASP.NET編程。

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

猜你喜歡
頁面設置
微信群聊總是找不到,打開這個開關就好了
大狗熊在睡覺
刷新生活的頁面
保健醫苑(2022年1期)2022-08-30 08:39:14
中隊崗位該如何設置
少先隊活動(2021年4期)2021-07-23 01:46:22
7招教你手動設置參數
本刊欄目設置說明
中俄臨床醫學專業課程設置的比較與思考
艦船人員編制的設置與控制
地鐵出入段線轉換軌設置
同一Word文檔 縱橫頁面并存
主站蜘蛛池模板: 成人国产精品2021| 伊人久久精品无码麻豆精品| 欧美啪啪网| 超清无码熟妇人妻AV在线绿巨人 | 狠狠色婷婷丁香综合久久韩国| 久久综合婷婷| 免费一级毛片在线观看| 国产综合色在线视频播放线视| 91精品啪在线观看国产91九色| 国产三级毛片| 在线观看网站国产| 97在线观看视频免费| 中文字幕在线欧美| 99久久精品美女高潮喷水| 欧美日韩午夜| 91精品啪在线观看国产| 亚洲动漫h| 亚洲大学生视频在线播放| 亚洲婷婷丁香| 99热国产这里只有精品无卡顿"| 91网红精品在线观看| 日本手机在线视频| 精品一区二区三区波多野结衣 | 国产视频欧美| 91成人试看福利体验区| 国产视频欧美| 2021最新国产精品网站| 色偷偷综合网| 欧美日韩亚洲国产| 91免费观看视频| 欧美成人精品在线| 91综合色区亚洲熟妇p| 天堂在线亚洲| 亚洲AⅤ永久无码精品毛片| 白丝美女办公室高潮喷水视频 | 在线观看91精品国产剧情免费| 欧美中文字幕一区| 夜夜高潮夜夜爽国产伦精品| 伊在人亞洲香蕉精品區| 99热免费在线| 国产香蕉97碰碰视频VA碰碰看| 欧美自慰一级看片免费| 国模视频一区二区| 日本亚洲欧美在线| 欧美精品成人一区二区视频一| 在线精品欧美日韩| 中文无码精品A∨在线观看不卡 | 国产精品亚洲片在线va| 国产精品美女网站| 嫩草影院在线观看精品视频| 欧洲高清无码在线| 国产国语一级毛片在线视频| 青青操国产| 亚洲成综合人影院在院播放| 好吊日免费视频| 欧美一区日韩一区中文字幕页| 亚洲无码高清视频在线观看| 欧美人在线一区二区三区| 麻豆精品在线播放| 欧美中文字幕在线播放| 54pao国产成人免费视频| 99在线小视频| 久热精品免费| 亚洲中文在线视频| 狂欢视频在线观看不卡| 久久精品国产精品青草app| 97国内精品久久久久不卡| 久久国产精品国产自线拍| 亚洲欧美日韩中文字幕在线| 亚洲一区二区日韩欧美gif| 欧美三级不卡在线观看视频| 国产乱人视频免费观看| 成人欧美日韩| 5555国产在线观看| 22sihu国产精品视频影视资讯| 国产成人精品免费av| 国产亚洲视频在线观看| 在线欧美a| 中文字幕在线看视频一区二区三区| 亚洲电影天堂在线国语对白| 狠狠色狠狠综合久久| 国产精品人成在线播放|