【问题标题】:trigger an event from another control从另一个控件触发事件
【发布时间】:2013-07-03 20:35:04
【问题描述】:

我正在使用 vb.net 和 winform。我遇到了一个问题,在过去的几个小时里我一直在努力解决这个问题。

我有一个主用户控件,我添加了一个组框,并在该组框内添加了一个这样的控件:

主用户控件

Me.GroupBox1.Controls.Add(Me.ctlWithDropDown)

用户控件 ctlWithDropDown

Me.Controls.Add(Me.ddList)

Private Sub ddlList_SelectionChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles ddlList.SelectionChanged
'some simple logic here to check if value changed        

End Sub

主用户控件继承了基类,该基类有一个事件将值设置为真或假,如下所示:

 Public Event SetFlag(ByVal value As Boolean)

我想知道在触发 SelectionChanged 事件时如何从下拉列表中触发/设置此布尔值。对这个问题有帮助吗?

【问题讨论】:

  • 在 selectedchanged 的​​处理程序中使用 RaiseEvent

标签: vb.net raiseevent


【解决方案1】:

为下拉列表连接一个事件处理程序:

AddHandler Me.ctlDropDown.SelectedIndexChanged, AddressOf ddlSelectedIndexChanged
Me.GroupBox1.Controls.Add(Me.ctlDropDown)

确保在控件中创建 ddlSelectedIndexChanged 并让它触发 SetFlag 事件:

Protected Sub ddlSelectedIndexChanged(ByVal sender As Object, ByVal e As EventArgs)

   RaiseEvent SetFlag(True)

End Sub

【讨论】:

  • 我更新了更多信息。你能明确哪些放在主用户控件上,哪些放在用户控件 ctlWithDropDown 上。我在这里迷路了。
  • 你的编辑让我有些困惑。请更好地解释您的问题和代码结构,我将进行编辑。
  • 它更像是用户控件上的用户控件。第一个用户控件拥有一个具有下拉列表的第二个用户控件。第一个用户控件继承了具有事件调用 SetFlag(boolean) 的父级。在第二个用户控件上,当下拉列表的事件“SelectionChanged”被触发时,我想引发事件 SetFlag(boolean)。我该怎么做?
  • 没关系,你的建议奏效了。我以前从未使用过引发事件,所以我有点困惑。但现在一切正常。非常感谢您的帮助!
【解决方案2】:

我认为 me.ctlDropDown 是您以编程方式制作的东西?如果是这样,那么这种事情应该适合你。

Public Sub Blah()
    Dim ctlDropDown As New ComboBox
    AddHandler ctlDropDown.SelectedIndexChanged, AddressOf IndexChangedHandler
    Me.GroupBox1.Controls.Add(ctlDropDown)
End Sub

Private Sub IndexChangedHandler()
    'Do whatever you need here.
End Sub

但是,如果这不是在运行时创建的,则应该创建一个事件处理程序,例如:

Private Sub IndexChangedHandler() Handles Me.ctlDropdown.SelectedIndexChanged
    'Do whatever you need here.
End Sub

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-20
    • 2015-05-08
    • 1970-01-01
    • 2012-10-30
    相关资源
    最近更新 更多