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

  • 相关阅读:
    配置Kickstart无人值守安装centos5.9 天高地厚
    数据库是什么,它是做什么用的? 天高地厚
    Mysql主从复制 天高地厚
    android开发中eclipse里xml的自动提示
    "error: device not found" and "error:device offline"
    gentoo中emerge失效:File "/usr/bin/emerge", line 43
    android:修改preference中view属性
    gerrit上利用sshkeygen公钥
    git 基本命令介绍
    prebuilt/linuxx86/toolchain/armeabi4.4.3/bin/armeabigcc: /lib/libc.so.6: version `GLIBC_2.11' not found:解决办法
  • 原文地址:https://www.cnblogs.com/Fooo/p/1701273.html
Copyright © 2011-2022 走看看