overrid events of Webbrowser ActiveX Control in .Net

简介:
  在.net中使用ie WebBrowser控件时,需要跟据自已的需求来定制组件的事件,风格等。其实在.net里控制ie组件的操作很简单,并且可以使用MSHTML提供的所有功能。您可以截获用户的所有操作事件,可以取得用户操作的对像以及对像的属性。下面是我的保留代码,以备后用。

     #region  WebBrowser所需的事件触发定义
    
///  
    
///  Generic HTML DOM Event method handler.
    
///  
     public   delegate   void  DHTMLEvent(IHTMLEventObj e);
    
///  
    
///  Generic Event handler for HTML DOM objects.
    
///  Handles a basic event object which receives an IHTMLEventObj which
    
///  applies to all document events raised.
    
///  
     public   class  DHTMLEventHandler
    {
        
public  DHTMLEvent Handler;
        HTMLDocument Document;
        
public  DHTMLEventHandler(HTMLDocument doc)
        {
            
this .Document = doc;
        }
        [DispId(
0 )]
        
public   void  Call()
        {
            Handler(Document.parentWindow.@event);
        }
    }
    
#endregion

         private   void  axWebBrowserADS_DocumentComplete( object  sender, AxSHDocVw.DWebBrowserEvents2_DocumentCompleteEvent e)
        {
            HTMLDocument doc 
=   this .axWebBrowserADS.Document  as  HTMLDocument ;
            
// 绑定事件
            DHTMLEventHandler onclickHandler  =   new  DHTMLEventHandler( doc ); 
            onclickHandler.Handler 
+=   new  DHTMLEvent( this .myads_onclick);
            doc.onclick 
=  onclickHandler;
        
            DHTMLEventHandler contextMenuHandler 
=   new  DHTMLEventHandler( doc ); 
            contextMenuHandler.Handler 
+=   new  DHTMLEvent( this .myads_oncontextmenu);
            doc.oncontextmenu 
=  contextMenuHandler;

            DHTMLEventHandler onkeydownHandler 
=   new  DHTMLEventHandler( doc ); 
            onkeydownHandler.Handler 
+=   new  DHTMLEvent( this .myads_onkeydown);
            doc.onkeydown 
=  onkeydownHandler;
            
            doc.body.style.border
= " none " ;
            doc.body.style.overflow
= " hidden " ;
        }

        
private   void  myads_oncontextmenu(IHTMLEventObj pEvtObj)
        {
            pEvtObj.returnValue
= false ;
        }

        
private   void  myads_onclick(IHTMLEventObj pEvtObj)
        {
            
string  a = pEvtObj.srcElement.GetType().ToString();
            
if (a == " mshtml.HTMLAnchorElementClass " )
            {
                mshtml.HTMLAnchorElementClass link
= (mshtml.HTMLAnchorElementClass)pEvtObj.srcElement;
                
if (link.href.Substring( 0 , 5 ).ToUpper() == " JOIN: " )
                {
                    clsVariable.FM_SERVICESLIST.doJOINcmd(link.href.Substring(
5 ));
                    pEvtObj.returnValue
= false ;
                }
                
else   if (link.id.Substring( 0 , 1 ) == " # " )
                {
                    clsVariable.FM_SERVICESLIST.doJOINcmd(link.id);
                    pEvtObj.returnValue
= false ;
                }
                
else
                {
                    link.target
= " _blank " ;
                }
            }
            
else   if (a == " mshtml.HTMLImgClass " )
            {
                mshtml.HTMLImgClass img
= (mshtml.HTMLImgClass)pEvtObj.srcElement;
                
if (img.id != null   &&  img.id.Substring( 0 , 1 ) == " # " )
                {
                    clsVariable.FM_SERVICESLIST.doJOINcmd(img.id);
                    pEvtObj.returnValue
= false ;
                }
                
else
                {
                    mshtml.HTMLAnchorElementClass link
= (mshtml.HTMLAnchorElementClass)pEvtObj.srcElement;
                    
if (link != null )
                        link.target
= " _blank " ;
                }
            }
            
else   if (a == " mshtml.HTMLAreaElementClass " )
            {
                mshtml.HTMLAreaElementClass area
= (mshtml.HTMLAreaElementClass)pEvtObj.srcElement;
                
if (area.href.Substring( 0 , 5 ).ToUpper() == " JOIN: " )
                {
                    clsVariable.FM_SERVICESLIST.doJOINcmd(area.href.Substring(
5 ));
                    pEvtObj.returnValue
= false ;
                }
                
else   if (area.id != null   &&  area.id.Substring( 0 , 1 ) == " # " )
                {
                    clsVariable.FM_SERVICESLIST.doJOINcmd(area.id);
                    pEvtObj.returnValue
= false ;
                }
                
else
                {
                    area.target
= " _blank " ;
                }
            }
        }

        
private   void  myads_onkeydown(IHTMLEventObj pEvtObj)
        {
            
if (pEvtObj.keyCode == 8 )     // backspace
            {
                pEvtObj.keyCode
= 0 ;
                pEvtObj.returnValue
= false ;
            }
            
else   if (pEvtObj.keyCode == 116 )     // KEY F5
            {
                pEvtObj.keyCode
= 0 ;
                pEvtObj.returnValue
= false ;
            }
            
else   if (pEvtObj.ctrlKey  &&  pEvtObj.keyCode == 70 )     // Key ctrl+F
            {
                pEvtObj.keyCode
= 0 ;
                pEvtObj.returnValue
= false ;
            }
            
else   if (pEvtObj.ctrlKey  &&  pEvtObj.keyCode == 78 )     // Key ctrl+N
            {
                pEvtObj.keyCode
= 0 ;
                pEvtObj.returnValue
= false ;
            }
            
else   if (pEvtObj.ctrlKey  &&  pEvtObj.keyCode == 80 )     // Key ctrl+P
            {
                pEvtObj.keyCode
= 0 ;
                pEvtObj.returnValue
= false ;
            }
        }

    本文转自 OldHawk  博客园博客,原文链接:http://www.cnblogs.com/taobataoma/archive/2007/04/30/733242.html ,如需转载请自行联系原作者



相关文章
|
.NET 开发框架 C#
直接通过User Control生成HTML-asp.net页面的换皮肤方案
前些日子看了园友Jeffrey Zhao的关于User Control生成HTML的两篇文章. 因为我不喜欢看到我们的工程中有比较多的ashx文件(同时对于IHttpHandler接口,我的意见是尽量尝试不用IHttpHandler),就琢磨了一下如何不用这个ashx和IHttpHandler也能做到同样的功能,有点发现.
924 0
|
前端开发 .NET 开发框架
ASP.NET AJAX Control Toolkit 新扩展特性:AutoCompleteExtender
一直期待ATLAS能够提供AutoComplete的扩展特性,终于不负众望,在最新版的ASP.NET AJAX Control Toolkit 已经包含了这个特性:AutoCompleteExtender。
876 0
|
3月前
|
开发框架 前端开发 JavaScript
ASP.NET MVC 教程
ASP.NET 是一个使用 HTML、CSS、JavaScript 和服务器脚本创建网页和网站的开发框架。
48 7
|
3月前
|
存储 开发框架 前端开发
ASP.NET MVC 迅速集成 SignalR
ASP.NET MVC 迅速集成 SignalR
75 0
|
4月前
|
开发框架 前端开发 .NET
ASP.NET MVC WebApi 接口返回 JOSN 日期格式化 date format
ASP.NET MVC WebApi 接口返回 JOSN 日期格式化 date format
56 0
|
4月前
|
开发框架 前端开发 安全
ASP.NET MVC 如何使用 Form Authentication?
ASP.NET MVC 如何使用 Form Authentication?
|
4月前
|
开发框架 .NET
Asp.Net Core 使用X.PagedList.Mvc.Core分页 & 搜索
Asp.Net Core 使用X.PagedList.Mvc.Core分页 & 搜索
143 0
|
7月前
|
开发框架 前端开发 .NET
ASP.NET CORE 3.1 MVC“指定的网络名不再可用\企图在不存在的网络连接上进行操作”的问题解决过程
ASP.NET CORE 3.1 MVC“指定的网络名不再可用\企图在不存在的网络连接上进行操作”的问题解决过程
212 0
|
7月前
|
开发框架 前端开发 JavaScript
JavaScript云LIS系统源码ASP.NET CORE 3.1 MVC + SQLserver + Redis医院实验室信息系统源码 医院云LIS系统源码
实验室信息系统(Laboratory Information System,缩写LIS)是一类用来处理实验室过程信息的软件,云LIS系统围绕临床,云LIS系统将与云HIS系统建立起高度的业务整合,以体现“以病人为中心”的设计理念,优化就诊流程,方便患者就医。
84 0