Winforms 如何在VB.Net中保存和恢复事件处理程序

Winforms 如何在VB.Net中保存和恢复事件处理程序,winforms,events,Winforms,Events,有很多帖子都与此相关,但我还没有看到任何与我正在寻找的解决方案相关的帖子 加载组合框时,设置ValueMember时将触发SelectedValueChanged事件。 我有一种方法可以加载应用程序中几乎所有的组合框,并且通常会根据用户所做的事情重新加载它们。因此,仅在加载后添加handler是不实际的 我想做的是使用ComboBox加载程序方法: 找出刚刚被要求创建的组合框的事件处理程序 装载 保存事件处理程序 加载组合框 然后将事件处理程序恢复为其以前的值 大概是这样的: Public S

有很多帖子都与此相关,但我还没有看到任何与我正在寻找的解决方案相关的帖子

加载组合框时,设置ValueMember时将触发SelectedValueChanged事件。 我有一种方法可以加载应用程序中几乎所有的组合框,并且通常会根据用户所做的事情重新加载它们。因此,仅在加载后添加handler是不实际的

我想做的是使用ComboBox加载程序方法:

  • 找出刚刚被要求创建的组合框的事件处理程序 装载
  • 保存事件处理程序
  • 加载组合框
  • 然后将事件处理程序恢复为其以前的值
  • 大概是这样的:

     Public Sub LoadComboBox(ByVal cbo As ComboBox)
            'Save Event Handler
            Dim eHandler As [Delegate] = Something(cbo)
            RemoveHandler cbo.SelectedValueChanged, eHandler
    
            'Load ComboBox
            '...
            cbo.ValueMember = "Key"
            cbo.DisplayMember = "Value"
    
    
            'Restore Event Handler
            AddHandler cbo.SelectedValueChanged, eHandler
    
        End Sub
    
    我看过一个关于在上检索事件处理程序的建议,但它对我不起作用,因为GetField方法总是不返回任何内容


    我目前正在到处使用布尔函数来控制事件处理程序代码是否会执行任何操作,但这很混乱且容易出错。

    让绑定保持原样怎么样,刷新数据集而不是更改事件处理程序?如果您真正感兴趣的是用户通过UI发起的选择更改,而不是代码中的更改,那么只需处理SelectionChangeCommitted事件即可。如果您想对代码中的某些更改(而不是全部更改)做出反应,那么这不是一个选项。我试图解决的问题是,每次加载组合框时,当它点击语句cbo.ValueMember=“Key”时,会触发SelectedValueChanged事件,因此,对于系统中的每个组合框,我必须以这样一种方式对它们的事件处理程序进行编码:设置.ValueMember属性时不执行任何操作。重试:我试图解决的问题是,每次加载组合框时,当它点击语句cbo.ValueMember=“Key”时,SelectedValueChanged事件都会触发,因此,对于系统中的每个组合框,我必须对它们的事件处理程序进行编码,以便在设置.ValueMember属性时不执行任何操作。我希望加载组合框的函数以某种方式使事件处理程序不被调用,而不是让代码在数百个地方执行此操作。我以为在加载过程中以某种方式禁用SelectedValueChanged事件会起作用。jmcilhinney-我误解了你的意思,但现在我明白了。SelectionChangeCommitted事件处理程序似乎工作正常。谢谢。