【问题标题】:How to link a windows form in one project to a button in another project using MVC3如何使用 MVC3 将一个项目中的 windows 窗体链接到另一个项目中的按钮
【发布时间】:2014-04-16 15:36:49
【问题描述】:

在我的程序中,我有一个注册页面,用户可以在其中输入所有详细信息以注册到系统。 On this page I have a button that when selected should open up a windows form that is located on another project, however when I select this button nothing is happening.

windows窗体应用程序背后的代码:

 public GenerateToken()
    {
        InitializeComponent();
    }

    public void Main()
    {
        Application.Run(GenerateToken.ActiveForm);
    }

上面的代码单独在一个项目中找到。在另一个项目中,这是调用此窗体的控制器的代码:

 public ActionResult generateToken()
    {
        new TokenGenerator.GenerateToken().Main();
        return RedirectToAction("RegisterPage");
    }

该按钮所在的视图中的代码是:

    <input id="GenToken" type="button" value="generateToken" onclick = "generateToken" />

我在按钮方面做错了什么,或者我试图将它们链接在一起的方式有误吗?

【问题讨论】:

  • WindowsForms 和 Web Application 是完全不同的概念。你不能用这种方法做你想做的事。您能详细说明您需要做什么吗?
  • 在我的 mvc 项目中,我有一个 wcf 应用程序,其中有用于注册过程的视图和控制器。 In view for the registration I must place a button that when selected should pop up a windows form application that would allow the user to enter a password and pin that will then use an encryption method to generate a key code.加密过程有效,但是我似乎无法在单击按钮时打开 Windows 窗体应用程序。
  • 每个客户的机器上都有这个 win 应用程序吗?这将作为本地机制还是在网络上工作?可以做到,但似乎这种方式不是做这些事情的正确方式。
  • 是的,每个客户端都有它,它将作为本地机制工作。我知道这不是正确的方法,但是必须以这种方式完成任务。

标签: c# jquery winforms asp.net-mvc-3


【解决方案1】:

当你坚持这种方式时,你必须在这两个应用程序之间建立一个沟通渠道。您可以为此目的使用现代技术,例如 Named Pipes.NET remoting 或托管在 IIS 上的 WCF(更好的一个)。 如果选择命名管道或 .NET 远程处理,则必须创建 Windows 服务项目并将其用作服务器应用程序。如此sample 所示,在您的 Windows 服务解决方案中创建一个主机对象并注册一个通道。您必须在这个托管类中定义一个方法作为 Windows 应用程序的运行器。请注意,您必须将其作为进程运行,而不是按照您在代码中的方式运行。您的 Web 应用程序必须从服务器托管对象调用该方法,这将导致您的 Windows 应用程序运行。 here 解释了如何启动进程。如果您知道该怎么做,请告诉我。

【讨论】:

  • 创建流程的代码应该在哪里输入呢?我认为它不会输入到视图本身中。我的问题是我似乎无法获得一个按钮/链接来访问控制器以访问导致 Windows 应用程序执行的方法。一旦我设法做到这一点,按钮将导致上面的 actionresult 方法,该方法将调用它上面的 main 方法以调出 windows 窗体?链接按钮如下给出资源未找到错误:@Html.ActionLink("Generate Token", "generateToken", "AccountController")
  • 您不能从任何类型的 Web 应用程序运行 Windows 窗体应用程序!正如我所说,您必须创建 Windows 服务项目并在那里处理 Windows 应用程序的运行。
【解决方案2】:

我设法通过在我的 windows 应用程序项目中创建一个类并将这个类链接到我的主 mvc 项目来解决这个问题。该类包含以下方法:

        Application.EnableVisualStyles();
        Application.SetCompatibleTextRenderingDefault(false);
        SomeForm form1 = new SomeForm();
        Application.Run(form1);

通过将此链接到我的主 MVC 项目中的按钮,我能够在按钮单击时加载 Windows 窗体。

【讨论】:

    猜你喜欢
    • 2012-12-25
    • 2019-11-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-28
    • 1970-01-01
    相关资源
    最近更新 更多