新秀与事件;击中F5后导致动作

时间:2010-08-04 17:26:01

标签: vb.net events runtime

所以是的,我是创建自己的自定义事件的新手。当我在窗体上放置控件时,我可以做基础知识,但这个更复杂一些。我有一个应用程序,它读入.TSV并根据它“读取”的对象数量填充一个带有控件的表单。例如:我有一个包含10个人对象的文件,我的代码填充了一个包含每个人控件的表单。简单的东西!

现在让我说我有一个ComboBox上的项目:“Alive”,“Deceased”,“Unborn”。就在旁边,我有一个年龄的文本框。现在,此文本框未启用,因为ComboBox的默认值为“Unborn”。但是让我们说当用户选择“活着”时,我想要启用该文本​​框以便输入年龄。

显然,在我问这个问题以及这个问题的标题时,我不知道该怎么做。我并不真正理解事件,我通过示例学习,但MSDN示例并没有完全消除它。

任何 帮助(特别是一个非常棒的循序渐进指南)将不胜感激。

4 个答案:

答案 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