VB.NET中的动态代码生成技巧

通常,VB.NET程序员会创建一个静态设计,而这一设计可以为程序的应用提供所需的一切。但是,在某些情况下,程序员或许不能够事先预计每种需求,这里就需要用到动态代码生成了。

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

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

使用动态控件

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

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

例一:向FlowLayoutPanel中添加新的链接

Private Sub btnTest_Click()
Handles btnTest.Click
' Create a link.
Dim NewLink As LinkLabel =
New LinkLabel()
' Add some properties to it.
NewLink.Text = DateTime.Now
.ToLongTimeString()
' Set the click event handler.
AddHandler NewLink.Click,
AddressOf NewLink_Click
' Place the button on the form.
lstLinks.Controls.Add(NewLink)
End Sub

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

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

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

时间: 2024-12-30 16:48:41

VB.NET中的动态代码生成技巧的相关文章

在vb.net中如何动态添加控件ovalshape(求大神帮帮小弟)

问题描述 在vb.net中如何动态添加控件ovalshape(求大神帮帮小弟) 控件button在vb.net中可以动态添加,但是ovalshape却不能,如:(button的动态添加) dim mybutton as new button ...... mybutton.text="" ..."" mybutton.location=new point() .... me.controls.add(mybutton) addhandler mybutton.cli

已调试好的asp程序在VB中转换为组件的技巧(转)好象也有不少人问过类似的问题

程序|技巧|问题|转换 已调试好的asp程序在VB中转换为组件的技巧 2001年2月3日 在网易虚拟社区的"VB和Basic区"里有一篇<使用VB编写纯ASP程序 [转][Technology] >,其实我认为最好的方法应该这样: 原文中的定义如下: Dim m_objResponse As Response 其实对于我们写过.dll的来说,并不是很好,就是如果要将该程序拿到.asp程序中进行调试时,尤其是我们将已经调试通过的.asp程序做成.dll时,.asp程序里用的是

vb.net泛型-怎么动态设置VB.NET的(of T)中的T值

问题描述 怎么动态设置VB.NET的(of T)中的T值 VB.Net中,可以使用function AAA(Of T)(xxx as T) As String这种形式设置参数类型.在调用的时候,如果是AAA(Of String)这种形式来调用的话,没问题,现在有需求如下有一个数组类型为Type,需要根据数组的值来调用AAA方法,并取得返回值. dim supportTypes as list(of type) supportTypes.Add(GetType(String)) supportTy

基于JS实现textarea中获取动态剩余字数的方法_javascript技巧

案例介绍:我们常见到有的网站有textarea文本框,当你输入的时候,下面有文字提示还能输入多少个字,今天就是要实现这个功能.当然,由于一个页面有好几个textarea,所以使用单个js逻辑进行控制是不行的,得小小的进行封装一下.当然我的封装还有缺漏,但是基本功能是实现了. 首先介绍下单个textarea实现案例 html部分: <textarea id="text_txt1"></textarea> <span id ="num_txt1&qu

javascript的document中的动态添加标签实现方法_javascript技巧

document的高级篇中提供了节点操作的函数,具体包括:获取节点,改变节点,删除节点,替换节点,创建节点,添加节点,克隆节点等函数.我们可以利用这些函数动态改变html的节点. 1.JavaScript <script type="text/javascript"> function test1(){//对个节点的ID相同时候的情况 var myhref = document.getElementById('same'); window.alert(myhref.inne

php 静态页面中显示动态内容_php技巧

最近在做一个站点时,需要生成静态页面,但是生成的静态页面中有些内容是需要动态获取的,怎不能每天生成一下吧.. 最后上网查了一下,再加上个要总结,呵....终于实现了..发出来,大家一起研究..呵... <span class="STYLE1">应用一</span>:文章计数,获取动态内容 计数页:count.php 复制代码 代码如下: <?php require_once './global.php'; $DB->query("updat

在VB.NET中实现拖放操作

第一次在csdn上发文章,希望大家帮忙使劲顶,鼓励一下新手,谢谢 http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dv_vstechart/html/vbtchImpDragDrop.asp 在VB.NET中实现拖放操作 Implementing Drag and Drop in Visual Basic .NET Steve Hoag Visual Basic .NET Team Microsoft Corpor

在VB环境中操作三维模型的实现方法

目前在虚拟设计和数控仿真程序的设计中,多采用VC和三维造型核心来实现对三维模型的显示和动态操作.由于VC较难掌握,涉及到图形渲染和操作的部分更是如此,而且三维造型核心一般需要从国外购买,对于一般的开发应用来说因成本太高而缺乏可行性.而VB作为一种完全面向对象的开发工具,在界面设计和数据库方面具有相当的优势,一般的设计人员也能够学习掌握,但是,在图形设计尤其是三维模型的显示和操作方面的研究和应用却不多.因此研究利用VB来实现三维模型的图形设计,将会在虚拟设计和仿真程序中发挥巨大的作用. 三维模型的

Marmoset Toolbag中的角色布光技巧 by Joe”EarthQuake”Wilson

有言在先 首先,我要感谢才华横溢的Tim"spacemonkey Appleby允许本教程中使用他那个极其NB的Sagat模型.不得不说,这种带有浓烈艺术气息的东西,很容易使一篇普通的教程瞬间变得高大上.Tim的更多作品请见www.badpolygon.com. 我之前也写过一些关于Marmoset Toolbag中光照内容相关的文章,比如这篇基础光照模型(http://www.marmoset.co/toolbag/learn/lighting).因为我觉得,从艺术的角度来深入了解一下光照相关