给你个例子就知道了
为二七等地区用户提供了全套网页设计制作服务,及二七网站建设行业解决方案。主营业务为网站设计制作、网站设计、二七网站设计,以传统方式定制建设网站,并提供域名空间备案等一条龙服务,秉承以专业、用心的态度为用户提供真诚的服务。我们深信只要达到每一位用户的要求,就会得到认可,从而选择与我们长期合作。这样,我们也可以走得更远!
Public Class Form1
'演示为动态添加的控件添加事件
Private WithEvents Tb As New TextBox '方法2必须这样写
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
' Dim Tb As New TextBox
Tb.Name = "Textbox1"
Tb.Text = "文本框1"
Controls.Add(Tb)
AddHandler Tb.KeyPress, AddressOf XX '方法1,移动鼠标触发
End Sub
Private Sub XX()
MsgBox("AddHandler方法")
End Sub
Private Sub ShowClick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Tb.Click '方法2,单击触发
MsgBox("Handles方法,你点击了" sender.name)
End Sub
End Class
你还要把过程与控件事件绑定
AddHandler 控件.事件名,addressof 事件过程
RemoveHandler 这个是取消绑定
没发现自动生存的事件过程后面还有一个Hander button1.Click之类的,这就是所谓事件句柄。反而跟过程名没关系,改成阿猫阿狗也可以。
例外也可以像 Private WithEvents obj as ControlClass 这么声明控件变量,估计像vb6那样会在下拉列表中列出事件系列。
哎呀,说了半天跑题了。 ff不存在嘛多半不是它的作用域范围内,应该把ff变量定义在类中,而不是类中的某个过程中。
最好把代码添多一点,把ff部分也添出来看看。
似有控件遍历窗体控件集合,或在控件集合中查询该控件名字,公用控件直接名字
Private WithEvents NewTextBox As TextBox
'通过使用WithEvents关键字声明一个对象变量为新的命令按钮
Private Sub Command1_Click()
If NewTextBox Is Nothing Then
Set NewTextBox = Controls.Add("VB.TextBox", "cmdNew", Form1)
NewTextBox.Move 200, 200
NewTextBox.Width = Form1.Width - 450
NewTextBox.Height = Form1.Height - 1400
NewTextBox.Visible = True
End If
End Sub
Private Sub Command2_Click()
If NewTextBox Is Nothing Then
Exit Sub
Else
Controls.Remove NewTextBox
Set NewTextBox = Nothing
End If
End Sub
布局方面,建议你用FlowLayoutPanel,不用手工控制控件位置了。假设有一个FlowLayoutPanel1。
先在窗体类中建一个控件的集合:
Dim
TextBoxes
As
New
List(Of
TextBox)
在button1的
Click事件
中写:
For
i
=
1
To
5
'5是每次加入的数量
Dim
newTextBox
As
New
TextBox()
'newTextBox.Size
=
New
Size(100,20)
'
TextBoxes.Add(newTextBox)
'加入我们的集合中
FlowLayoutPanel1.Controls.Add(newTextBox)
'加到窗体的FlowLayoutPanel中去
Next
i
然后button2的Click事件中:
For
Each
itemTextBox
As
TextBox
In
TextBoxes
'这里的itemTextBox.Text就代表每个TextBox里的文本
'如果你需要清空,调用TextBoxes.Clear()和FlowLayoutPanel.Controls.Clear()即可
Next
你需要的应该是反射,类似如下,我测试通过的:
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