C#通过html调用WinForm的方法
作者:且行且思 发布时间:2022-02-26 03:53:16
标签:C#,html,WinForm
本文实例讲述了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#程序设计有所帮助。


猜你喜欢
- InetAddress类InetAddress类用来封装我们前面讨论的数字式的IP地址和该地址的域名。你通过一个IP主机名与这个类发生作用,
- SpringBoot集成Mybatis时mybatis.mapper-locations和@MapperScan的作用1、mybatis.m
- 问题 @Cacheable注解不支持配置过期时间,所有需要通过配置CacheManneg来配置默认的过期时间和针对每个类或者是方法进行缓存
- 数组的长度是固定的,无法适应数据变化的需求。为了解决这个问题,Java提供了另一个容器 java.util.ArrayList集合类,让我们
- 安卓开发网络请求可谓是安卓开发的灵魂,如果你不会网络请求,那么你开发的应用软件就是一具没有灵魂的枯骨。在安卓开发中进行网络请求和java中的
- C# 匿名函数、lambda表达式、Linq查询一、匿名函数的使用匿名函数是一个“内联”语句或表达式
- 一、观察者模式基本概况1.概念观察者模式(Observer Design Pattern)也被称为发布订阅模式(Publish-Subcri
- 前言Docker旨在提供一种应用程序的自动化部署解决方案,在 Linux 系统上迅速创建一个容器(轻量级虚拟机)并部署和运行应用程序,并通过
- 前言我们都知道在java中进行日期格式化使用simpledateformat。通过格式 yyyy-MM-dd 等来进行格式化,但是你知道其中
- 一、概念 1. 为了能让程序操作数据库,对数据库中的表进行操作,每一种数据库都会提供一套连接和操作该数据库的驱动,而且每种数据库
- 本文实例讲述了Android编程实现AIDL(跨进程通信)的方法。分享给大家供大家参考,具体如下:一. 概述:跨进程通信(AIDL),主要实
- 这篇文章主要介绍了Java继承方法重写实现原理及解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友
- 前言有时候可能会遇到需要批量修改文件格式的需求,但百度了很久都没有找到相关的应用什么的,于是学过两天 Android 的我想自己去弄一个 A
- 前言上一篇已经对线程池的创建进行了分析,了解线程池既有预设的模板,也提供多种参数支撑灵活的定制。本文将会围绕线程池的生命周期,分析线程池执行
- 快速排序------------------------------------------------------------------
- 前言最近和前端联调接口,需要进行一个省市区联动,最终定的方案是通过接口返回一个树形结构给前端,类似这样的结构:下面就把相关表和代码分享给大家
- 1.标识符①用于给变量、类和方法命名(类名首字母大写,变量和方法名首字母小写并遵循驼峰原则)②标识符的命名规范: ■ 标识符必须
- 前言SPI 全称为 Service Provider Interface,是一种服务发现机制。SPI 的本质是将接口实现类的全限定名配置在文
- 1、在当前窗口查找文本【Ctrl+F】F3 向下查找关键字出现位置 Shift+F3 向上一个关键字出现位置2、在当前工程内查找文
- 日期、数字格式化显示,是web开发中的常见需求,spring mvc采用XXXFormatter来处理,先看一个最基本的单元测试:packa