【问题标题】:how to open windows form control in a web page?如何在网页中打开窗体控件?
【发布时间】:2012-02-27 18:21:43
【问题描述】:

我正在开发一个网站以及 Windows 应用程序,并且我将为 Windows 窗体应用程序和网站使用相同的网页。

所以我想在单击网页上的链接后调用 Windows 窗体控件。我想将 windows 窗体控件显示为弹出窗体。

如何做到这一点?或者提供一些与此问题相关的文件。

【问题讨论】:

标签: c# winforms web-applications


【解决方案1】:

假设您的意思是在您的 WinForms 应用程序中托管WebBrowser 类的实例,您可以为其ObjectForScripting 属性提供一个对象。它提供了一种调用方法来触发您的 WinForms 代码。例如:

public partial class MyWindowsFormsForm()
{
    public MyWindowsFormsForm()
    {
        this.WebBrowserControl.ObjectForScripting = this;
    }

    public void DoSomething()
    {
        MyOtherForm f = new MyOtherForm();
        f.Show();
    }
}

然后,在您的页面中:

<script language="javascript" type="text/javascript">
function loadOtherForm()
{
    if (RunningInWinFormsApplication())
    {
        window.external.DoSomething();
    }
    else
    {
        // Code to do something when NOT running inside the WinForms app could go here
    }
}

function RunningInWinFormsApplication()
{
   return (window.external.DoSomething != undefined);
}
</script>

<button onclick="loadOtherForm();">Call into WinForms app</button>

有一个明显的警告是,您需要在网页中添加代码来检查以确保 window.external.DoSomething 确实存在,因此您的 onclick(在此示例中)可能会调用一个辅助方法,该方法调用进入 WinForms,或者在页面未托管在您的应用程序中时执行任何需要的操作。

【讨论】:

  • 你能提供更多关于你所说的话的信息吗?
  • @Priyanka - 我提供了示例代码和指向 MSDN 上文档的链接,该文档本身包含另一个示例。假设 msdn 文档没有回答您的任何其他问题,您需要更多信息的部分是什么? =)
  • 我采用了你所说的方法。我有为 Web 应用程序设计的网页,我将在 Web 浏览器控件中打开相同的网页,该控件将放置在 Windows 窗体应用程序的一种形式上。
  • 如果我打开包含我的网站页面的表单并单击网页中的链接,那么那时它应该从 Windows 应用程序打开另一个表单。在上面由 msdn 提供的示例中,我必须在包含 Web 浏览器控件的表单上编写自己的网页的 html 代码。但我不想更改我的表单代码。打开表单或网站页面的决定应该在网页本身而不是在 Windows 表单应用程序上进行。
  • @Priyanka,那是因为 msdn 是一个示例 - 它写出 HTML 以使示例代码保持简单和独立,HTML 可以很容易地放在您导致的单独文件中要导航到的 WebBrowser 控件。表单中 DoSomething() 方法中发生的事情完全取决于您 =)
【解决方案2】:

我认为您感到困惑 - 或者我们是。

“我有一个为 Web 应用程序设计的网页,我将 在将放置的 Web 浏览器控件中打开相同的网页 windows窗体应用程序的一种形式。如果我打开表格 这是我的网站页面,我点击了来自 网页,然后它应该从 窗口应用程序”

所以你知道会被点击的链接吗?然后在WebBrowser Navigating Method 检查它是否是您期望的链接并打开 WinForm,例如:

private void webBrowser1_Navigating(object sender, WebBrowserNavigatingEventArgs e)
{
if (e.Url.Tostring() == "http://localhost/LinkThatOpensFormTwo.htm")
{
Form2 f = new Form2();
f.Show();

【讨论】:

    【解决方案3】:

    您可以使用 WPF 浏览器应用程序在 Web 浏览器(首选 Internet Explorer)中显示 Windows 窗体,该应用程序具有嵌入 Windows 窗体(或类似 .NET 组件)的功能。

    这是一个有效的问题,因为有很多公司没有资源可以开发用于 Web HTML 5 格式的旧版 .NET 应用程序(使用 AJAX 等)。此类遗留应用程序可以轻松显示在 Web 浏览器中,只需进行少量初始设置。

    1. 在现有的 Visual Studio IDE 中打开 Windows 窗体应用程序
    2. 转到项目属性并在应用程序设置中将输出类型设置为“类库”
    3. 添加一个类型为'WPF Browser Application'的新项目,如下图
    4. 引用您的 Windows 窗体(现在为 DLL)以及 WindowsFormIntegrationSystem.Windows.Forms 的两个重要程序集
    5. 编写代码以在 XAML 和 XAML.CS 页面中调用 Windows 窗体,如 in this tutorial link 所示。
    6. 重建解决方案并单击发布并保存选择文件系统,如下所示。
    7. 转到发布文件夹并双击扩展名为“.xbap”的文件。它应该会在 Internet Explorer 中自动打开,并首次请求权限。
    8. 您应该能够在 Web 浏览器中显示输出。

    让我知道如果您希望我创建视频教程来实现同样的效果。

    【讨论】:

      猜你喜欢
      • 2020-08-21
      • 2010-11-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多