0

我想在 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)添加事件处理程序?

4

1 回答 1

3

您可以通过创造性地使用部分类并从 winforms 应用程序引用代码隐藏类来解决这个问题。

但是,这将是一个非常脆弱的实现。例如,如果您想通过菜单提供相同的功能,或者想将按钮控件更改为与 winforms 控件不具有相同签名的第三方供应商控件,反之亦然。

一个更好的方法,即使没有服务层,也可以将通用功能移动到一个类中,该类在两个应用程序之间共享,并且只需从事件处理程序中调用。

是的,您必须在两个应用程序中定义事件处理程序,但这是一个微不足道的代码量,还允许您执行特定于平台的错误处理(例如,在 Web 应用程序中,您可能希望通过在 winforms 应用程序中的 javascript 警报,您可能希望通过 msgbox 显示它)。

于 2013-06-02T19:31:09.533 回答