我希望在VB.NET WinForms应用程序中重用一个ASP.NET Web应用程序代码后面的代码。请从后面的代码(ASP.NET Web应用程序(而不是网站))中查看以下代码:
Public Class _Default
Inherits System.Web.UI.Page
Private Sub button1_Click(sender As Object, e As System.EventArgs) Handles button1.Click
MsgBox("button1.click")
End Sub
End Class
和背后的代码:
Imports WebApplication1
Public Class TestClass
Public Shared Sub Test100()
MsgBox("button clicked on page")
End Sub
End Class
Public Class Form1
Public Event BellRings(ByVal sender As Object, ByVal e As EventArgs)
Public test As String
public Shared TestMethod()
MsgBox("Test Method was called")
End public
Private Sub Form1_Load(sender As Object, e As System.EventArgs) Handles Me.Load
Try
Dim d As WebApplication1._Default = New WebApplication1._Default
AddHandler d.button1.Click, AddressOf Form1.TestMethod
Catch ex As Exception
End Try
End Sub
End Class
我意识到创建一个服务层可能会更好,这两个客户都使用,但是如果上述情况可能,我会徘徊?即是否可以在WinForm中为Web应用程序中的事件添加事件处理程序,即button.click?
答案 0 :(得分:3)
您可以通过创建使用部分类并从winforms应用程序引用代码隐藏类来逃避这一点。
然而,这将是一个非常脆弱的实施。例如,如果您想通过菜单提供相同的功能,或者想要将按钮控件更改为与winforms控件具有相同签名的第三方供应商控件,反之亦然。
即使没有服务层,更好的方法是将公共功能移动到两个应用程序之间共享的类中,并且只需从事件处理程序中调用。
是的,您必须在两个应用程序中定义事件处理程序,但这是一个微不足道的代码量,并且还允许您执行特定于平台的错误处理(例如,在Web应用程序中,您可能希望显示在winforms应用程序中通过javascript警报异常,您可能希望通过msgbox显示它。