好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

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#程序设计有所帮助。

dy("nrwz");

查看更多关于C#通过html调用WinForm的方法的详细内容...

  阅读:44次