C#: 通过html调用WinForm 。。。。。

摘要:
将Com可见的所有方法放在一个类中,以便于维护

完整测试代码:
Form1.cs

C#: 通过html调用WinForm 。。。。。第1张C#: 通过html调用WinForm 。。。。。第2张代码
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

namespace test
{
    [System.Runtime.InteropServices.ComVisibleAttribute(
true)]
    
public partial class Form1 : Form
    {
        
public Form1()
        {
            InitializeComponent();
        }

        
private void Form1_Load(object sender, EventArgs e)
        {
            System.IO.FileInfo file 
= new System.IO.FileInfo(Application.StartupPath+@"\test1.htm");
            webBrowser1.Url 
= new Uri(file.FullName);
            webBrowser1.ObjectForScripting 
= this;
        }

        
private void button1_Click(object sender, EventArgs e)
        {
            
object[] objects = new object[1];
            objects[
0]="C#访问javascript脚本";
            webBrowser1.Document.InvokeScript(
"messageBox", objects);
        }

        
public void MyMessageBox(string message)
        {
            MessageBox.Show(message);
        }
    }
}

类WinOper

C#: 通过html调用WinForm 。。。。。第3张C#: 通过html调用WinForm 。。。。。第4张代码
[System.Runtime.InteropServices.ComVisibleAttribute(true)]
    
public class WinOperationClass
    {
        
public void MyMessageBox1()
        {
            MessageBox.Show(message);
        }

        
public void ShowForm()
        {
            Form2 f2 
= new Form2();
            f2.WindowState 
= FormWindowState.Normal;
            f2.Show();
        }

    }

网页

C#: 通过html调用WinForm 。。。。。第5张C#: 通过html调用WinForm 。。。。。第6张代码
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
    
<head>
        
<title></title>
        
<script language="javascript" type="text/javascript">
            
function messageBox(message)
            {
                alert(message);
            }
        
</script>
    
</head>
    
<body>
    
        
<button onclick="window.external.MyMessageBox('javascript访问C#代码')">javascript访问C#代码</button>
            
<href="javascript:window.external.MyMessageBox1()">javascript访问C#代码</a>
        
<href="javascript:window.external.ShowForm()">javascript访问C#代码</a>
    
</body>
</html>

补充:

webBrowser1.ObjectForScripting = this;
这句话的意思是webBrowser1的脚本执行的Com绑定的方法是 从Form1 来的,

而MyMessageBox1和ShowForm
却是在WinOperationClass

类里面的,肯定是不行的
第一个可以是因为form1里面有MyMessageBox这个方法
你吧MyMessageBox1和ShowForm移动到form1中或者把MyMessageBox移动到WinOperationClass里面,再把 webBrowser1.ObjectForScripting = this;这句改成
WinOperationClass w=new WinOperationClass();
webBrowser1.ObjectForScripting = w;

就可以了
推荐第二种……把所有的 Com可见的方法放在一个类里面好维护 

免责声明:文章转载自《C#: 通过html调用WinForm 。。。。。》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Xmemcached集群与SpringBoot整合jenkins 插件下载ssl证书问题下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

WinForm中DefWndProc、WndProc与IMessageFilter的区别

Windows消息系统由3部分组成:     1.消息队列。Windows应用程序的消息是由Windows统一在一个消息队列中管理的。     2.消息循环。应用程序从Windows消息队列中获得自己的消息,并将其分配给窗口过程进行处理。     3.窗口过程。负责处理接收到的消息,每个窗口都有对应的窗口过程,负责截获消息并响应。WndProc是窗口过程函...

用C#搭建IE BHO勾子, 取表单密码

授权CSDN, 请在征求同意后转载. 作者: 陈嘉, NetSecure Inc, Canada, 软件工程师 微软在1997年正式退出Browser Helper Object (BHO), 使程序员能够更好的对IE进行二次开发和操作. 在通过编写BHO程序数月后, 我希望把我的一些经验告诉才开始的同志, 避免走一些弯路. 我本人是非常喜欢C++的....

C# WinForm:无法访问已释放的对象

C#在父窗口中调用子窗口的过程: 1、 创建子窗口对象 2、 显示子窗口对象   笔者的程序中,主窗体MainFrm通过菜单调用子窗口ChildFrm。在窗体中定义了子窗口对象,然后在菜单项点击事件中,加入了如下代码来创建和显示子窗口:   Private childFrm myChildFrm = null; //定义子窗口对象private voi...

winform 界面控件更新(转)

由于多线程可能导致对控件访问的不一致,导致出现问题。C#中默认是要线程安全的,即在访问控件时需要首先判断是否跨线程,如果是跨线程的直接访问,在运行时会抛出异常。 解决办法有两个: 1、不进行线程安全的检查 2、通过委托的方式,在控件的线程上执行 查看源代码 打印? publicpartialclas...

【转】Javascript异步编程之setTimeout与setInterval

Javascript异步编程之setTimeout与setInterval 转自:http://www.tuicool.com/articles/Ebueua 在谈到异步编程时,本人最主要会从以下三个方面来总结异步编程(注意:特别解释:是总结,本人也是菜鸟,所以总结不好的,请各位大牛多多原谅!) 1. setTimeout与setInterval详细分析基...

使用 js 测试 websocket 连接

参考:https://blog.csdn.net/linysuccess/article/details/109223712 配合上篇文章,代码如下: <!DOCTYPE html> <html lang="zh-cn"> <head> <meta charset="UTF-8"> <m...