Vb.net WinForms-MVP-窗体界面中的窗体事件
我正试图在我正在开发的一个小型WinForms应用程序中实现MVP 众所周知,我需要定义一个Vb.net WinForms-MVP-窗体界面中的窗体事件,vb.net,winforms,Vb.net,Winforms,我正试图在我正在开发的一个小型WinForms应用程序中实现MVP 众所周知,我需要定义一个IView接口 IView界面应该有一个事件,该事件在混凝土视图加载时触发 此事件已作为Load()事件在WinForms中实现 现在,在一些指南/教程中,我看到他们是这样实现的 Public Interface IView Event OnPrepareView() ..... End Interface Public Class MainForm Inherits Form Impl
IView
接口
IView
界面应该有一个事件,该事件在混凝土视图加载时触发
此事件已作为Load()
事件在WinForms中实现
现在,在一些指南/教程中,我看到他们是这样实现的
Public Interface IView
Event OnPrepareView()
.....
End Interface
Public Class MainForm
Inherits Form
Implements IView
Private Sub Main_Load(sender As Object, e As EventArgs) Handles Me.Load
RaiseEvent OnPrepareView()
End Sub
Public Event OnPrepareView()
End Class
现在我想知道是否可以直接在界面中公开表单Load
事件,这样IView
看起来像:
Public Interface IView
Event Load()
.....
End Interface
加载事件以其Load
事件的形式实现
如果可能,我应该如何在VB中实现它
更新
例如,在System.Windows.Forms.Form
中定义的属性(如Icon
)或函数(如Show
)
我会有一个IView
:
Public Interface IView
Property Icon as Icon
Sub Show()
End Interface
然后在我的具体实施中
Public Class FooForm
Inherits Form
Implements IView
Public Overloads Property Icon as Icon Implementes IView.Icon
Get
return MyBase.Icon
End Get
Set
MyBase.Icon = value
End Set
Public Overloads Sub Show()
MyBase.Show()
End Sub
End Class
但是我怎样才能处理表单事件呢
或者我应该在IView
中声明新事件,比如:
Public Interface IView
Property Icon as Icon
Sub Show()
Event OnLoad()
End Interface
Public Class FooForm
Inherits Form
Implements IView
....
....
Public Event OnLoad() Implements IView.OnLoad
Private Sub FooForm_Load() Handles Me.Load
RaiseEvent OnLoad()
End Sub
End Class
您应该在接口中声明事件,然后在表单中
实现接口,然后重写OnLoad
并引发事件。例如:
Public Interface IView
Event Load As EventHandler
End Interface
Public Class Form1
Implements IView
Public Shadows Event Load As EventHandler Implements IView.Load
Protected Overrides Sub OnLoad(e As EventArgs)
MyBase.OnLoad(e)
RaiseEvent Load(Me, e)
End Sub
End Class
尝试添加Inherits表单实现IView我在代码中忘记了它,但它已经像你说的那样了……阅读了很长时间后,我认为Vb.Net无法处理这个问题。我想我需要重载方法/属性/事件,然后从基类调用基方法/类/任何东西,就像这里说的那样。事件应该在接口中声明,应该在表单中实现,并在表单的OnLoad
事件中引发。就像你在第一个事件中所做的那样。@RezaAghaei小例子是否可行?我只是想知道,在VB中,是否可以使用表单事件(如load、closed、closing等)作为定义具有相同签名的事件的接口的实现。换句话说,如果我可以通过接口公开表单事件。。。在C#中这没有问题,但在VB中我必须使用“Implements Ifoo.Foo”。但是我可以用VB写这篇文章,因为事件是在基类中声明的(在WinForm的情况下,是在System.Windows.Forms.Form中声明的)是的,只需不处理表单中的Load
事件,就可以重写负责引发Load
事件的OnLoad
方法。