详细介绍VB.NET动态控件

开发 后端
这里介绍VB.NET动态控件,我们所展示的例子中程序员向FlowLayoutPanel中添加了LinkLabels.或许你可以个这样的设置来记录和保存常用的URL,文件,网络地址或是其他资源所在位置的数值。

VB.NET还是比较常用的,于是我研究了一下VB.NET动态控件,在这里拿出来和大家分享一下,希望对大家有用。

本文的讨论也将着眼于这两种情况。首先是当程序员需要动态建立一个控件并将代码附着于控件之上时。例如,你或许想创建一个链接列表,但是不知道需要创建链接的数量或是链接中会出现什么样的数据。第二种是当程序员需要定义代码以反映出特殊需求的时候。例如,你或许要执行能反映用户系统配置的代码。

类似上述的情况当然不会每天都上演。事实上,它们只在非常情况下才出现。然而,作为程序员,仍然要意识到.NET为解决动态情形提供了方案。有了正确的技巧,你就可以写出能灵活处理动态情况的应用程序了。

使用VB.NET动态控件

许多程序员总会遇到需要创建VB.NET动态控件的时候。我们所展示的例子中程序员向FlowLayoutPanel中添加了LinkLabels.或许你可以个这样的设置来记录和保存常用的URL,文件,网络地址或是其他资源所在位置的数值。这一示例没有真正保存链接,但是你可以使用XML序列化功能来实现保存。

每次当用户点击Test按钮时,示例代码就会动态创建一个新的LinkLabel控件。真正的演示代码并不复杂。以下就展示了创建这类控件以及将控件放入FlowLayoutPanel,lstLabel中通常所需要做的一切。

向FlowLayoutPanel中添加新的链接

  1. Private Sub btnTest_Click()     
  2. Handles btnTest.Click     
  3. ' Create a link.     
  4. Dim NewLink As LinkLabel = New LinkLabel()     
  5. ' Add some properties to it.     
  6. NewLink.Text = DateTime.Now     
  7. .ToLongTimeString()     
  8. ' Set the click event handler.     
  9. AddHandler NewLink.Click,     
  10. AddressOf NewLink_Click     
  11. ' Place the button on the form.     
  12. lstLinks.Controls.Add(NewLink)     
  13. End Sub 

如你所料,该代码开始的时候创建了一个新的LinkLabel并为其赋予了一些值。这一示例使用的是当前时间。你的代码或许能够对某一真实资源进行访问。

请注意该代码也向链接的Click事件中指定了一个处理程序。你必须使用示例中的AddHandler技巧,因为普通的Handles关键词路径不起作用。一方面,设计应用程序的时候你并不清楚控件的名称。即便你为控件指定了一个名称,你也不知道用户要创建的控件数量,所以我们没有办法清楚会有多少处理程序会被创建。处理程序的代码与控件代码类似,因此没有必要创建多个处理程序。用于这个示例的处理代码见例二。例二:处理VB.NET动态控件点击事件

  1. Private Sub NewLink_Click( _ ByVal sender As System.Object, ByVal e As System.EventArgs)  
  2. ' Verify that you actually have a LinkLabel  
  3. If Not sender.GetType() Is GetType(LinkLabel) Then  
  4. MessageBox.Show("Wrong control type provided!")  
  5. Return  
  6. End If  
  7. ' Convert the input sender to a Button.  
  8. Dim ThisLink As LinkLabel = sender   
  9. ' Show that we have the correct button.  
  10. MessageBox.Show("You created this link at: " + ThisLink.Text)  
  11. End Sub  

你可能已经注意到例一中的事件处理器使用的是宽松代表——它没有将ByVal发送器作为System.Object,也没有将ByVal e作为System.EventArgs作为参数因为它不需要这二者。然而,当你创建一个事件处理器来创建VB.NET动态控件时,通常你需要将ByVal发送器作为 System.Object参数,这意味着将这两者都包含其中。

有些程序员在创建事件处理器的时候会出现一个错误,即没有检查传入控件的类型。发送器对象可能包含多选择,而如果未对事件处理器进行事件处理类型的设置,那么你就会面临更多的选择。我们的示例代码一开始就检查了传入控件对象的类型。这样以来发送器就不会像下面所展示的代码一样:

  1. Private Sub btnTest2_Click() Handles btnTest2.Click   
  2. ' Create a link.  
  3. Dim NewButton As Button = New Button()  
  4. ' Add some properties to it.  
  5. NewButton.Text = DateTime.Now.ToLongTimeString()  
  6. ' Set the click event handler.  
  7. AddHandler NewButton.Click, AddressOf NewLink_Click  
  8. ' Place the button on the form.  
  9. lstLinks.Controls.Add(NewButton)  
  10. End Sub  

此代码在FlowLayoutPanel中创建了一个按钮,大多数情况下这都能正常运行,除非事件处理器不按照按钮所示的进行操作。如果你打算服务多个控件类型,那么每个控件类型都需要一个独特的处理。你可以使用多事件处理器或者为某些类型提供选择标准。

NewLink_Click()事件处理器照常将传入发送器转换成指定类型,在这个示例中则是LinkLabel.该代码可以访问LinkLabel属性并能用其他方式进行互动。在我们的示例中,只显示了一个能在创建链接的时候告知我们的对话框。

【编辑推荐】

  1. 浅谈VB.NET线程构造器
  2. 简单分析VB.NET使用线程
  3. VB.NET List(T)编写框架方法
  4. 简单介绍VB.NET线程同步
  5. VB.NET声明API详细描述
责任编辑:佚名 来源: 中国IT实验室
相关推荐

2009-10-28 09:55:29

VB.NET MyCl

2009-10-10 16:44:52

VB.NET开发控件

2010-01-12 15:54:47

VB.NET动态控件数

2010-01-21 16:45:00

VB.NET继承规则

2009-11-10 12:42:47

VB.NET Prin

2010-01-19 10:03:35

VB.NET Labe

2010-01-08 13:35:35

VB.NET写Log方

2010-01-19 12:53:59

VB.NET Text

2009-10-12 15:41:09

VB.NET动态代码

2009-10-28 17:32:25

VB.NET控件介绍

2010-01-08 15:03:12

VB.NET类属性

2010-01-08 09:43:21

VB.NET汉字转换

2009-11-10 12:48:17

VB.NET三维模型

2009-10-23 13:14:38

2009-10-14 10:19:57

VB.NET Doma

2009-10-14 16:04:43

VB.NET Noti

2010-01-13 10:53:24

VB.NET控件

2009-10-20 10:16:24

VB.NET COMB

2009-10-27 10:30:18

VB.NET实现动态菜

2010-01-22 14:19:38

VB.NET调用jar
点赞
收藏

51CTO技术栈公众号