我以编程方式添加控件但问题是我想在单击时显示创建的控件的名称。
在编程创建控件时,我似乎无法处理Control.MouseDown
。
感谢。
答案 0 :(得分:0)
这是因为,当您在代码中添加控件时,您还需要专门为表单添加事件处理程序,以用于您要为该控件处理的每个事件...
在这里添加控件包含这样的代码。
AddHandler MyControl1.MouseDown, AddressOf MyControl_MouseDown
处理程序例程必须遵循与通常事件相同的参数结构 ...减去句柄部分。
Private Sub MyControl_MouseDown(sender As Object, e As MouseEventArgs)
' YOUR HANDLING CODE
End Sub
如果您真的需要该名称,请使用发件人对象的.Name属性。
注意:如果您有公共代码,则可以将相同的处理程序例程添加到多个控件中。如果这样做,请使用Sender对象来阐明在处理程序中触发了哪个控件。
如果您稍后删除控件,请记得删除处理程序..
RemoveHandler MyControl1.MouseDown
替代方法
如果您计划添加的最大控件数已知,那么您可以在表单代码类的顶部为它们添加占位符...
WithEvents MyControl1 As WhateverItIs
WithEvents MyControl2 As WhateverItIs
WithEvents MyControl3 As WhateverItIs
WithEvents MyControl4 As WhateverItIs
WithEvents MyControl5 As WhateverItIs
WithEvents MyControl6 As WhateverItIs
etc
请注意,实际上并没有在那时创建按钮,它们都将是Nothing,但它确实告诉编译器在将这些对象分配给实际对象时如何处理这些对象。
然后在添加实际控件时指定它们......
Dim NewControl as WhateverItIs
Me.Controls.add NewControl
MyControl1 = NewControl
这样,如果您需要,可以为每个占位符添加所有控件的事件类型的代码。
Private Sub MyControl1_MouseDown(sender As Object, e As MouseEventArgs) Handles MyControl1.MouseDown
' YOUR HANDLING CODE
End Sub
Private Sub MyControl1_MouseUp(sender As Object, e As MouseEventArgs) Handles MyControl1.MouseUp
' YOUR HANDLING CODE
End Sub
'etc
如果您稍后删除控件,请记住,将占位符重置为空...
MyControl1 = Nothing
不幸的是,你不能制作一个阵列或WithEvents占位符列表。
注意:这正是Visual Studio自动为您构建表单设计器的方式。每次通过工作室UI添加控件时,VS都会自动添加所有代码。