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