我有一个sub,当14个ComboBoxes的索引发生变化时进行处理。我能够强制转换事件的发送者,并从那里获取属性。但是,在此之后,我希望能够更改实际发送者的属性,而不是强制转换发送者的属性。我该怎么做呢?
当前代码:
Private Sub ComboBoxIndexChange(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ComboBox1.SelectedIndexChanged, ComboBox2.SelectedIndexChanged [etc]
        Dim myComboBox As ComboBox = sender
        Select Case myComboBox.Text
            Case "Will"
                Me.Controls(myComboBox.Name).Text = "555-555-555"
            Case "Bob"
                Me.Controls(myComboBox.Name).Text = "555-124-1234"
            [etc]
        End Select
    End Sub
End Class如您所见,我目前正在尝试使用
Me.Controls(myComboBox.Name).Text但是我得到一个错误: object reference没有设置为对象的实例。
我能做什么?
发布于 2009-07-25 11:32:29
事件处理程序中的sender参数(通常)将包含对引发事件的对象的引用。如果是ComboBox控件的SelectedIndexChanged事件,则更改其SelectedIndex属性的将是ComboBox。因此,在上面的代码示例中,myComboBox引用的是引发事件的ComboBox。
需要说明的是:如果您在ComboBox控件的下拉列表中选择一项,以便它引发SelectedIndexChanged事件,则事件处理程序的发送方参数将是该ComboBox,而不是它的副本。对于所有引用类型都是如此。
如果它是一个值类型,引发事件,那将是一个完全不同的故事,但这是非常罕见的情况(当涉及到窗体上的控件时,它从来都不是这样的)。
发布于 2009-07-25 11:31:29
Text是一种引用类型,因此如果直接赋值给myComboBox变量的ComboBox属性,它将更新控件。
发布于 2009-07-27 15:17:19
这应该是可行的:
 Dim ctl As Control
 Dim cmb As ComboBox
 For Each ctl In Me.Controls
   If sender Is ctl Then
     cmb = ctl
     cmb.Text = "string"
     End If
   Next ctl您可以在cmd.Text = " string“的位置添加特定的字符串赋值代码。通过分配cmb,您可以使用特定的组合框属性,而不是通用控件属性。
https://stackoverflow.com/questions/1181891
复制相似问题