本文实例讲述了C#通过html调用WinForm的方法。分享给大家供大家参考,具体如下:
完整测试代码:
Form1.cs:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
|
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:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
[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();
}
}
|
网页:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
<!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 >
|
补充:
1
|
webBrowser1.ObjectForScripting = this ;
|
这句话的意思是webBrowser1的脚本执行的Com绑定的方法是 从Form1 来的,而MyMessageBox1和ShowForm却是在WinOperationClass类里面的,肯定是不行的。
第一个可以是因为form1里面有MyMessageBox这个方法,你吧MyMessageBox1和ShowForm移动到form1中或者把MyMessageBox移动到WinOperationClass里面,再把
1
|
webBrowser1.ObjectForScripting = this ;
|
这句改成
1
2
|
WinOperationClass w= new WinOperationClass();
webBrowser1.ObjectForScripting = w;
|
就可以了
推荐第二种……把所有的 Com可见的方法放在一个类里面好维护
希望本文所述对大家C#程序设计有所帮助。