C#通过html调用WinForm的方法

 更新时间:2016年04月20日 11:38:52   作者:且行且思  
这篇文章主要介绍了C#通过html调用WinForm的方法,涉及html页面中使用JavaScript访问C#的相关技巧,需要的朋友可以参考下

本文实例讲述了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#程序设计有所帮助。

相关文章

  • C#中的Dialog对话框

    C#中的Dialog对话框

    这篇文章介绍了C#中的Dialog对话框,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-05-05
  • 带你一文了解C#中的Expression

    带你一文了解C#中的Expression

    c#中有Expression,即表达式,通过Expression可以动态构造代码,并编译执行,下面这篇文章主要给大家介绍了关于C#中Expression的相关资料,需要的朋友可以参考下
    2021-12-12
  • C#数组反转与排序实例分析

    C#数组反转与排序实例分析

    这篇文章主要介绍了C#数组反转与排序,实例分析了数组反转与常见的排序技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-01-01
  • C# 解压gizp文件(.tgz)的实例

    C# 解压gizp文件(.tgz)的实例

    下面小编就为大家分享一篇C# 解压gizp文件(.tgz)的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2017-12-12
  • C#快速实现IList非泛型类接口的自定义类作为数据源

    C#快速实现IList非泛型类接口的自定义类作为数据源

    本文主要介绍了C#快速实现IList非泛型类接口的自定义类作为数据源,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-02-02
  • c#基础学习之封装

    c#基础学习之封装

    说到封装,其实是比较基础类的问题,它为程序设计提供了系统与系统,模块与模块,类与类之间交互的实现手段
    2013-09-09
  • C#取得随机颜色的方法

    C#取得随机颜色的方法

    这篇文章主要介绍了C#取得随机颜色的方法,通过自定义函数实现随机颜色的功能,非常具有实用价值,需要的朋友可以参考下
    2015-01-01
  • C#的3DES加密解密算法实例代码

    C#的3DES加密解密算法实例代码

    这篇文章主要介绍了C#的3DES加密解密算法实例代码,有需要的朋友可以参考一下
    2013-11-11
  • 自定义WPF窗体形状的实战记录

    自定义WPF窗体形状的实战记录

    WPF是制作界面的一大利器,下面这篇文章主要给大家介绍了关于自定义WPF窗体形状的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们一起来看看吧
    2018-09-09
  • C#实现字母与ASCII码互相转换

    C#实现字母与ASCII码互相转换

    ASCII是基于拉丁字母的编码系统,也是现今最通用的单字节编码系统,本文主要为大家详细介绍了如何使用C#实现字母与ASCII码互转,需要的可以参考下
    2024-01-01

最新评论