亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        關(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ù)組類(lèi)似功能的方法,加深我們對(duì).NET控件集合概念的理解。

        .NET;控件數(shù)組

        0 引言

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

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

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

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

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

        而且.NET并非完全取消了控件數(shù)組,通過(guò)一些技巧我們照樣可以建立控件數(shù)組,繼續(xù)使用習(xí)慣的編程方式,下面我們通過(guò)VB.NET和ASP.NET分別介紹在windows應(yīng)用程序編程和網(wǎng)頁(yè)編程中控件數(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語(yǔ)言)如下:

        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))語(yǔ)句加入到窗口中,分別為每個(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),我們可以通過(guò)設(shè)置x,y的值來(lái)調(diào)整這100個(gè)控件左上角位置。

        然后使用循環(huán)遍歷這100個(gè)控件,每行20個(gè),而控件的大小長(zhǎng)是60,高是21,通過(guò)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í)我們可以通過(guò)sender得到執(zhí)行代碼的控件,但是通過(guò)sender我們無(wú)法像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#語(yǔ)言為例,在頁(yè)面中建立100個(gè)TextBox控件,代碼(C#語(yǔ)言)如下:

        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);

        }

        通過(guò)以上代碼,我們動(dòng)態(tài)建立了100個(gè)TextBox控件,但是我們無(wú)法像windows應(yīng)用程序中那樣通過(guò)設(shè)置控件的坐標(biāo)來(lái)設(shè)置這100個(gè)控件的位置,這里我們?cè)陧?yè)面中放入一個(gè)panel控件,然后將控件全部加入到panel控件,通過(guò)設(shè)置panel控件的位置來(lái)調(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中我們用戶(hù)自己動(dòng)態(tài)加載的控件每次頁(yè)面刷新時(shí)都要重新加載一次,這與我們大多人想象的不同。所以上面創(chuàng)建控件數(shù)組的代碼每次刷新頁(yè)面都要加載一次。

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

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

        在ASP.NET中控件沒(méi)有tag屬性,所以我們不能像windows應(yīng)用程序中那樣使用這個(gè)屬性來(lái)保存下標(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í)可以通過(guò)下面的語(yǔ)句得到控件的下標(biāo):

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

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

        如圖1所示,我們要在頁(yè)面中建立100個(gè)TextBox控件,每行20個(gè),共5行。因?yàn)閳D中所示的排列原因,我們使用二維數(shù)組來(lái)建立會(huì)使代碼更加直觀(guān),首先我們?cè)陧?yè)面中拖入一個(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(mén)_0_0、T_1_0、T_2_0。。。T_19_4的形式,用以?xún)?chǔ)存控件的兩個(gè)下標(biāo)。在每個(gè)控件創(chuàng)建時(shí)設(shè)置了外觀(guān)屬性,并設(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)境走過(guò)來(lái)的程序員通過(guò)一些技巧實(shí)現(xiàn)了控件數(shù)組,可以使用熟悉的方式來(lái)寫(xiě)代碼,但.NET為何要取消控件數(shù)組呢?我們開(kāi)始提到使用控件數(shù)組主要有3個(gè)原因:

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

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

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

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

        控件數(shù)組可以通過(guò)下標(biāo)指定某一個(gè)控件,在.NET中可以使用this.FindControl語(yǔ)句通過(guò)控件名稱(chēng)來(lái)指定某個(gè)控件。

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

        9 結(jié)語(yǔ)

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

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

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

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

        [3] 蔣順業(yè). ASP.NET應(yīng)用程序開(kāi)發(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ù)分頁(yè)導(dǎo)航的設(shè)計(jì)與應(yīng)用[J]. 軟件, 2015, 36(12): 60-62.

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

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

        [9] Java從入門(mén)到精通, 清華大學(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中常見(jiàn)的自定義控件
        電腦迷(2012年24期)2012-04-29 00:44:03
        三星電子將開(kāi)設(shè)應(yīng)用程序下載商店
        微軟軟件商店開(kāi)始接受應(yīng)用程序
        精品日韩欧美| 无码人妻精品一区二区三区蜜桃| 亚洲欧洲国产成人综合在线| 夜夜躁狠狠躁2021| av无码av在线a∨天堂app| 亚洲av综合色区久久精品天堂 | 丰满五十六十老熟女hd| 国产精品福利久久香蕉中文| 日本成年少妇人妻中文字幕| 精品视频在线观看日韩| 亚洲国产精品无码中文字| 亚洲一线二线三线写真| 国产亚洲精品综合一区| 91精品国产综合久久久蜜臀九色| 风韵人妻丰满熟妇老熟女视频| 亚洲午夜久久久久久久久电影网| 99香蕉国产精品偷在线观看| 免费二级毛片在线播放| av在线不卡一区二区三区| 国产主播一区二区三区蜜桃| 极品白嫩的小少妇| 乱子伦视频在线看| 中文字幕亚洲区第一页| 激情 人妻 制服 丝袜| 变态 另类 欧美 大码 日韩| 豆国产95在线 | 亚洲| 韩国美女主播国产三级| 国产在线观看午夜视频| 久久精品中文闷骚内射| 国产suv精品一区二区| 亚洲成熟丰满熟妇高潮XXXXX| 今井夏帆在线中文字幕| 国产成人av在线免播放观看新| 7777奇米四色成人眼影| 亚洲国产精品综合久久20 | 亚洲午夜经典一区二区日韩| 色婷婷五月综合激情中文字幕| 67194熟妇在线永久免费观看| 亚洲国产剧情在线精品视| 日本免费精品一区二区三区视频| 日本中文字幕一区二区有码在线|