加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

C#通过html调用WinForm的方法

发布时间:2020-12-15 06:40:33 所属栏目:百科 来源:网络整理
导读:本篇章节讲解C#通过html调用WinForm的方法。供大家参考研究具体如下: 完整测试代码: Form1.cs: using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Text;using

本篇章节讲解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>
      <a href="javascript:window.external.MyMessageBox1()">javascript访问C#代码</a>
    <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#相关内容感兴趣的读者可查看本站专题:《WinForm控件用法总结》、《C#数据结构与算法教程》、《C#常见控件用法教程》、《C#面向对象程序设计入门教程》及《C#程序设计之线程使用技巧总结》

希望本文所述对大家C#程序设计有所帮助。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读