如何在 vb.net 为动态生成的控件添加事件并传递数据
'把图片的声明放在外面,类里面过程外面,而且要用As,不然等会儿没法用
创新互联坚持“要么做到,要么别承诺”的工作理念,服务领域包括:网站制作、网站建设、企业官网、英文网站、手机端网站、网站推广等服务,满足客户于互联网时代的昌江黎族网站设计、移动媒体设计的需求,帮助企业找到有效的互联网解决方案。努力成为您成熟可靠的网络建设合作伙伴!
Dim myPicture As New System.Windows.Forms.PictureBox()
'动态生成的控件,加一行
Private Sub UserControl1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
Me.Panel3.Controls.Add(myPicture)
myPicture.Size =New System.Drawing.Size(115, 160)
myPicture.TabStop =False
myPicture.Name ="p"
myPicture.Cursor = Cursors.Hand
AddHandler myPicture.Click, AddressOf mypic_Click '添加事件
AddHandler returnid, AddressOf idReturned '绑定事件和过程
End Sub
'再来个事件,放在声明的地方,就是类里面、过程外面
Private Event returnid(ByVal id As String) '这个事件可以传递值哦~
'普通的单击事件
Private Sub mypic_Click()
RaiseEvent returnid(myPicture.Name)
End Sub
'会传值的事件过程
Private Sub idReturned(ByVal id As String)
Dim bookInfo As New BookInfo
bookInfo.Show()
Me.Parent.Enabled = False
'用id变量做点什么吧
End Sub
如果要改事件的签名(参数一类的)的话,得重写控件。你可以这样自己弄一个事件。
VB.NET 动态创建picturebox后如何用其image属性
这样了:
CType(Me.Controls("PictureBox11"), PictureBox).Image = My.Resources.image1
Find 返回数组,元素类型为Object。
Item() 可以把控件名作关键字,但也返回Object。这个方法是默认的,可以省略。
CType 转换引用类型。
大概如此,我是2008,没vb6那般的控件数组。
vb.net 如何让动态生成的90个Label 排列成 3列 30行?
需要一点,数学知识:画个图,容易理解:
如图分析:
第1行第1列控件Label1(0)的Left和Top;
Label1(0).Left = L
Label1(0).Top = T
Label1(0).Width = 宽
Label1(0).Height = 高
并设控件之间的行距,列举分别为:V,H
那么:
第1列 第2列 第3列
第1行 Label1(0).Left = L Label1(1).Left = L + 宽 + H Label1(2).Left = L + 2 * (宽 + H)
Label1(0).Top = T Label1(1).Top = T Label1(2).Top = T
第2行 Label1(3).Left = L Label1(4).Left = L + 宽 + H Label1(5).Left = L + 2 * (宽 + H)
Label1(3).Top = T + 高 + V Label1(4).Top = T + 高 + V Label1(5).Top = T + 高 + V
第3行 Label1(6).Left = L Label1(7).Left = L + 宽 + H Label1(8).Left = L + 2 * (宽 + H)
Label1(6).Top = T + 2*(高 + V) Label1(7).Top = T + 2*(高 + V) Label1(8).Top = T + 2*(高 + V)
第4行 Label1(9).Left = L Label1(10).Left = L + 宽 + H Label1(11).Left = L + 2 * (宽 + H)
Label1(9).Top = T + 3*(高 + V) Label1(10).Top = T + 3*(高 + V) Label1(11).Top = T + 3*(高 + V)
。。。。。。
所以:
下标为 i 的控件的 Left、Top属性为?:
确定其列号的方法:(i Mod 3) + 1,其Left属性为:Label1(i).Left = L + (i Mod 3) * (宽 + H)
确定其行号的方法:(i \ 3) + 1,其Top属性为:Label1(i).Top = T + (i \ 3) * (高 + V)
vb.net 动态生成的控件,事件也动态加,怎么做呢?
你需要的应该是反射,类似如下,我测试通过的:
Imports System.Reflection
Public Class Form1
Public Sub MMMToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles MMMToolStripMenuItem.Click
MsgBox("menu click")
End Sub
'在按钮事件处理里面通过反射名称调用相应菜单事件
Public Sub CallEventMethod(sender As Object, e As EventArgs)
Dim b As Button = sender '获取点击的按钮
'拼接菜单事件名称
Dim MethodName As String = b.Name "ToolStripMenuItem_Click"
Dim t As Type = Me.GetType
Dim m As MethodInfo = t.GetMethod(MethodName)
'反射方法
m.Invoke(Me, New Object() {Nothing, Nothing})
End Sub
'动态生成了按钮
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
Dim btn As New Button
btn.Location = New Point(100, 100)
btn.Name = "MMM" '关键
btn.Text = "MMM"
'注册事件
AddHandler btn.Click, AddressOf Me.CallEventMethod
Me.Controls.Add(btn)
End Sub
End Class
vb.net动态添加控件,并且绑定了一些事件,这些事件只能对最新生成的控件做修改,之前生成的无法修改
比如说这样添加的计时器:
Dim Timer1 As New Timer
你要在合适的地方开始,比如窗体Load事件中,这样:
Timer1.Interval = 1000 '单位毫秒,1000毫秒=1秒
Timer1.Enabled = True '启用计时器
然后在代码窗口上方下拉列表里选择Timer1的Tick事件,自动添加代码:
Private Sub Timer1_Tick(ByVal sender As Object, ByVal e As System.EventArgs) Handles Timer1.Tick
End Sub
这是计时器触发的事件,每秒触发一次,在这里面输入循环判断是否有日程即可。提示:你可以用Now对象获取当前的日期和时间。
网站栏目:vb.net动态生成图片,net 生成图片
当前链接:http://scgulin.cn/article/hspgjj.html