如何在VB.Net中保存和还原事件处理程序

时间:2014-04-21 20:04:16

标签: winforms events

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

加载ComboBox时,在设置ValueMember时会触发SelectedValueChanged事件。 我有一个方法,在应用程序中加载几乎所有的ComboBox,并且通常根据用户的操作重新加载。因此,仅在加载后对AddHandler不实用。

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

  1. 找出刚才要求的ComboBox的事件处理程序 载入
  2. 保存事件处理程序
  3. 加载ComboBox
  4. 然后将事件处理程序恢复为以前的值。
  5. 这样的事情:

     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
    

    我已经查看了一个在How to Attach the Events of an Original Object to a Deep Copied Clone检索事件处理程序的建议,但它并不适合我,因为GetField方法总是返回Nothing。

    我目前正在各处使用布尔值来控制事件处理程序代码是否执行任何操作,但这很麻烦且容易出错。

0 个答案:

没有答案