zoukankan      html  css  js  c++  java
  • C#: 通过html调用WinForm 。。。。。

    完整测试代码:
    Form1.cs

    代码
    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

    代码
    [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();
            }

        }

    网页

    代码
    <!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可见的方法放在一个类里面好维护 

  • 相关阅读:
    Git的安装
    报错Invalid character found in method name. HTTP method names must be tokens|the HTTP protoco
    Spring Cloud(二)—— Eureka注册与发现
    spring-boot swagger2 设置全局token,说明页面接口无法带入token
    c# 结构体中包含结构体数组的使用
    百度地图api热力图时报错Cannot read property 'y' of undefined
    springboot使用freemaker导出word文档
    c# 同时运行两个相同的程序
    idea maven的pom文件已导入依赖,但是无法引入该包中class
    bootstrap Table 导出时时间格式显示秒 科学计数法显示
  • 原文地址:https://www.cnblogs.com/Fooo/p/1701273.html
Copyright © 2011-2022 走看看