Vb.net 在网络中更改VB6属性的替代方法是什么

Vb.net 在网络中更改VB6属性的替代方法是什么,vb.net,vb6-migration,Vb.net,Vb6 Migration,我已经将vb6控件迁移到vb.net,它引用了FARPoint Spread,下面是vb6代码 Public Property Let RetainSelBlock(ByVal New_RetainSelBlock As Boolean) sprSpread.RetainSelBlock() = New_RetainSelBlock PropertyChanged "RetainSelBlock" End Property 下面的代码是向导从上面的Vb6代码生成的V

我已经将vb6控件迁移到vb.net,它引用了FARPoint Spread,下面是vb6代码

  Public Property Let RetainSelBlock(ByVal New_RetainSelBlock As Boolean)
     sprSpread.RetainSelBlock() = New_RetainSelBlock
     PropertyChanged "RetainSelBlock"
 End Property 
下面的代码是向导从上面的Vb6代码生成的VB.Net代码

 Public Property RetainSelBlock() As Boolean
    Get
        RetainSelBlock = sprSpread.RetainSelBlock
    End Get
    Set(ByVal Value As Boolean)
        sprSpread.RetainSelBlock = Value
         RaiseEvent RetainSelBlockChange()
    End Set
End Property

 Public Event RetainSelBlockChange()

如您所见,VB6 PropertyChanged方法已更改为RaiseEvent。这是正确的吗?

这基本上是正确的,但实施此类事件的正确方法如下:

Public Property RetainSelBlock() As Boolean
    Get
        Return sprSpread.RetainSelBlock
    End Get
    Set
        If sprSpread.RetainSelBlock <> value Then
            sprSpread.RetainSelBlock = value
            OnRetainSelBlockChanged(EventArgs.Empty)
        End If
    End Set
End Property

Public Event RetainSelBlockChanged As EventHandler

Protected Overridable Sub OnRetainSelBlockChanged(e As EventArgs)
    RaiseEvent RetainSelBlockChanged(Me, e)
End Sub
Public属性RetainSelBlock()为布尔值
得到
返回sprSpread.RetainSelBlock
结束
设置
如果sprSpread.RetainSelBlock值,则
sprSpread.RetainSelBlock=值
OnRetainSelBlockChanged(EventArgs.Empty)
如果结束
端集
端属性
公共事件RetainSelblock更改为EventHandler
受保护的可重写子OnRetainSelBlockChanged(e作为事件参数)
RaiseEvent RetainseLBlock已更改(Me,e)
端接头
请注意,在这种情况下,仅当属性值实际更改时才会引发事件。如果再次为属性指定相同的值,则不会再次引发事件。此外,此代码遵循使用
EventHandler
委托的预期模式,以便事件处理程序具有预期的一致性签名,并且仅通过专用方法引发事件,该方法可以在派生类中重写,以提供继承事件的自定义行为

请注意,您还可以在具有该属性的类中实现
INotifyPropertyChanged
接口,然后引发
PropertyChanged
事件。这实际上可能更接近VB6的工作方式,尽管我不确定。这样做的好处是,您只有一个事件,因此您在生产者和消费者中编写的代码更少,因此如果您有很多属性,那就更好了。缺点是,您必须在使用者中编写条件代码来确定更改了哪些属性,而不是为每个属性使用不同的事件处理程序


编辑:也不是更正确的名称“RetainSelBlockChanged”而不是
RetainSelBlockChange
。按照惯例,在属性值更改后引发的事件使用后缀“Changed”,在属性更改前引发的事件使用后缀“Changed”,并允许您取消更改。

谢谢jmchilinney。根据您的输入,我实现了INotifyPropertyChanged接口。以下是今后任何机构想要参考的代码

Public Property RetainSelBlock() As Boolean
    Get
        Return sprSpread.RetainSelBlock
    End Get
    Set
        If sprSpread.RetainSelBlock <> Value Then
            sprSpread.RetainSelBlock = Value
            OnRetainSelBlockChanged("RetainSelBlock")
        End If
    End Set
End Property

Implements INotifyPropertyChanged
Public Event PropertyChanged As PropertyChangedEventHandler Implements INotifyPropertyChanged.PropertyChanged

Private Sub OnRetainSelBlockChanged(ByVal info As String)
    RaiseEvent PropertyChanged(Me, New PropertyChangedEventArgs(info))
End Sub
Public属性RetainSelBlock()为布尔值
得到
返回sprSpread.RetainSelBlock
结束
设置
如果sprSpread.RetainSelBlock值,则
sprSpread.RetainSelBlock=值
OnRetainSelblock已更改(“RetainSelBlock”)
如果结束
端集
端属性
实现INotifyPropertyChanged
公共事件PropertyChanged为PropertyChangedEventHandler实现INotifyPropertyChanged.PropertyChanged
私有子OnRetainSelBlockChanged(ByVal信息作为字符串)
RaiseEvent PropertyChanged(我,新PropertyChangedEventArgs(信息))
端接头

基于此帖子,使用
RaiseEvent
似乎是正确的方法:。您可能会发现此迁移主题有助于决定如何继续。我的理解是,实现.Net将是最合适的前进方向。然而,这是您需要根据预期用途来决定的。