所以是的,我是创建自己的自定义事件的新手。当我在窗体上放置控件时,我可以做基础知识,但这个更复杂一些。我有一个应用程序,它读入.TSV并根据它“读取”的对象数量填充一个带有控件的表单。例如:我有一个包含10个人对象的文件,我的代码填充了一个包含每个人控件的表单。简单的东西!
现在让我说我有一个ComboBox上的项目:“Alive”,“Deceased”,“Unborn”。就在旁边,我有一个年龄的文本框。现在,此文本框未启用,因为ComboBox的默认值为“Unborn”。但是让我们说当用户选择“活着”时,我想要启用该文本框以便输入年龄。
显然,在我问这个问题以及这个问题的标题时,我不知道该怎么做。我并不真正理解事件,我通过示例学习,但MSDN示例并没有完全消除它。
任何 帮助(特别是一个非常棒的循序渐进指南)将不胜感激。
答案 0 :(得分:2)
根据我从注释中收集的内容,您希望将事件添加到在运行时创建的表单对象。对对象使用AddHandler命令。有什么影响:
AddHandler NameOfFormObject.TypeOfAction, AddressOf HowToHandle
Private Sub HowToHandle(ByVal sender as System.Object, ByVal e As System.EventArgs)
DropDownMenu.enabled = True
End Sub
这样做,您将能够修改在运行时创建的对象的事件。在您的情况下,听起来您似乎想要使用Josaph推荐的操作,并最终结合所提供的两种解决方案,如此
AddHandler ComboBox1.SelectedIndexChanged, AddressOf HowToHandle
Private Sub HowToHandle(ByVal sender as System.Object, ByVal e As System.EventArgs)
If DirectCast(sender, ComboBox).SelectedIndex = 0 'Alive
DirectCast(DirectCast(sender, ComboBox).Tag, TextBox).enabled = True
Else
DirectCast(DirectCast(sender, ComboBox).Tag, TextBox).enabled = False
End If
End Sub
答案 1 :(得分:1)
您将需要使用ComboBox_SelectedIndexChanged()事件来捕获组合框项已更改。此时,您需要检查以查看已选择的组合框项目,并决定是否应启用TextBox。这是一个例子。注意:此示例假定“Alive”是组合框中0索引处的第一项。
Private Sub ComboBox1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs)
If ComboBox1.SelectedIndex = 0 Then 'Alive
TextBox1.Enabled = True
Else
TextBox1.Enabled = False
End If
End Sub
动态生成组合框并添加处理程序。
Dim cmb as New ComboBox
AddHandler cmb.SelectedIndexChanged, AddressOf ComboBox1_SelectedIndexChanged
Me.Controls.Add(cmb)
答案 2 :(得分:0)
我想,你将拥有10个组合框......就像你将拥有10个文本框一样。
在这种情况下......一旦你以AndyPerfect和Joseph方式附加和处理事件......在那种方法中你需要代码来了解你需要启用/禁用哪些文本框。
首先,您需要知道哪个组合框触发了事件:这是使用“sender”参数完成的。 ctype(sender, Combobox)
访问ComboBox的方法和属性。
一旦知道了哪个组合,就需要激活/停用正确的文本框。 为此,您需要在创建它时在Combobox的“TAG”属性中添加对TextBox的引用。
Dim txt as new TextBox
Dim cmb as new ComboBox
cmb.Tag = txt
然后......你简单使用:
ctype(ctype(sender, Combobox).Tag, TextBox).Enable = true
答案 3 :(得分:0)
以下是我最终写完它的方法。我感谢所有的帮助!谢谢!
If DirectCast(sender, ComboBox).SelectedIndex = 2 Then
DirectCast(Me.Controls.Item(DirectCast(sender, ComboBox).Tag), TextBox).Enabled = True
Else
DirectCast(Me.Controls.Item(DirectCast(sender, ComboBox).Tag), TextBox).Enabled = False
End If