我的第一篇博文(Winfrom下WebBrowser控件的使用)

      说实话来到博客园也得2年多了,可惜一片文章都没写过。只因今天心情很不好,决定趁工休时间写篇博文放松放松。文字真的是一件很神奇的东西,写出来了感觉心情会好很多。我现在有个想法就是把我总结的一些技术性的东西以后慢慢地放到博客园上来。

今天心情为什么心情不好呢,因为早晨我迟到了。这次迟到估计是我本月内第三次迟到了,好害怕公司通报啊。由于路上修路,今早得绕道。平时也就是20分钟的路程,今早居然用了40分钟。靠,为什么堵车啊,为什么总是在右转或者左转的时候那么堵。看红绿灯那么偏向直行的车,我真想踹门砸玻璃。我不停的催促着司机,快点吧,到50我们就开会了。可真到了无影山中路上,我绝望了,已经快8点了,足足迟到了快10分钟。我也不那么生气了,认命吧。我同事一路上很淡定,在后头给媳妇打了电话,默默地等待着迟到的到来。唉,以后一定要在铃声响了就起床,因为说不定就会遇到耽误行程的事情,要留出解决问题的时间。

      好吧,现在真不烦恼了。第一篇文章不能就只是发牢骚,写点有用的东西吧。这段时间一直在弄winform和android,我打算在新年到来之前,一定要让自己的技术有所提升。对于android的学习,我准备分块进行,先实现一些手机中常用的功能。等对android熟悉了,再写一些自己想实现的好玩的东西。以后我会把实现的一个个小功能都在这园子里整理出来,也为以后复习用,说不定时间久了,这就是财富。

      也没有准备今天到底写什么,就突然想起来了昨天弄的一个东西,WebBrowser控件的使用:

对于初学者的我来说,平时都没怎么接触过这个控件。最近想实现在winform中嵌套网页,从网页里显示出来列表数据。由于需要涉及到下载网页中的数据问题,所以得用到winform和webform之间的通信问题。从园子里搜索了好多,终于找到了个解决方法。

1.winform中访问webform中的元素,并添加事件

这个比较简单,举个例子:

webform中的内容:

我的第一篇博文(Winfrom下WebBrowser控件的使用)
1 <html>
2 <body>
3   <input id="btnDownload" type="button" value="下载并打开" />
4 </body>
5 </html>
View Code

winform中的内容:

由于winform访问WebBrowser控件中的内容,需要在WebBrowser控件中文档加载完后才可以。

所以需要在DocumentCompleted时间下编写调用代码(DocumentCompleted:在web浏览器控件中承载的文档全部加载后发生。)

我的第一篇博文(Winfrom下WebBrowser控件的使用)
 1 private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
 2 {
 3      HtmlDocument hd = webBrowser1.Document;//这句是获取WebBrowser控件中的文档对象
 4   hd.GetElementById("btnDownload").Click += new HtmlElementEventHandler(btnDownload_HtmlElementEvent);//这句就是为文档中的按钮添加click事件
 5 }
 6 
 7 //这个是自定义的方法,就是click后要实现的功能
 8 void btnDownload_HtmlElementEvent(object sender, HtmlElementEventArgs e)
 9 {
10   MessageBox.Show("我现在不生气了");
11 }
View Code

其中:

hd.GetElementById是捕获元素的方法之一,在vs用点一下就出来,定位到方法名上后都一般能看到vs的智能提示,一般就明白该方法是干嘛用的了

我的第一篇博文(Winfrom下WebBrowser控件的使用)
园子里这位博主关于WebBrowser控件的使用介绍的很全,有时间的大家可以看看
http://www.cnblogs.com/peterzb/archive/2009/07/12/1521787.html

2.webform中访问winform中的方法

我的第一篇博文(Winfrom下WebBrowser控件的使用)
 1 <html>
 2 <body>
 3  <div id="dataList">
 4    <ul>
 5      <li><p onclick="window.external.showDetails(12178)">今天为什么迟到了啊,气死我了。</p></li>
 6 
 7      <li><p onclick="window.external.showDetails(12306)">以后我决定响铃就起,不再拖沓。</p></li>
 8 
 9    </ul>
10  </div>
11 </body>
12 </html>
View Code

winform中的内容:

我的第一篇博文(Winfrom下WebBrowser控件的使用)
 1 using System.Security.Permissions;
 2 
 3 [PermissionSet(SecurityAction.Demand, Name = "FullTrust")]
 4 [System.Runtime.InteropServices.ComVisibleAttribute(true)]
 5 public partial class  Form1 : Form
 6 {
 7 
 8        public Form1()
 9        {
10             InitializeComponent();
11             webBrowser1.ObjectForScripting = this;
12 
13        }
14 
15 }
16 
17 //在winform中的自定义方法,WebBrowser控件中js需要调用的方法
18 
19 public void showDetails(int infoid)
20 {
21   frmDetails fd = new frmDetails();
22   WebBrowser wb = (WebBrowser)fd.Controls["webBrowser1"];
23   wb.Navigate("###?id=" + infoid);
24   fd.ShowDialog();
25 }
View Code

我就不解释了,复制到vs下,鼠标放到代码,看智能提示,一看就明白是干嘛用的了。

我的第一篇博文(Winfrom下WebBrowser控件的使用)

上一篇:swt 将窗体最小化到磁盘


下一篇:win7/8 下net命令无效的问题