`
touchinsert
  • 浏览: 1280085 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

[转]在IE中使用VS.net WinForm控件

 
阅读更多
在VisualStudio.net中,类似于Applet或ActiveX控件,WinForm控件可以嵌入IE中使
用。嵌入IE的Windows窗体控件不要求注册,不需用户提示即可激活。我们可以很方便地实
现一些WebForm中实现起来相对麻烦的交互操作,结合.netRemoting等技术访问后台数据
库,则可生成功能强大而且美观的WebForm页面。
使用该技术,需要客户端安装.netFrameWork及IE6.0,在Windows2003中已经自带
了.netFrameWork。
嵌入WebForm的WinFrom控件利用公共语言运行库代码访问安全性,一些特殊操作还需要设置
访问权限。

下面就让我们做个简单的例子,在WinForm用户控件中使用GDI+实现画线功能,并把它嵌入
IE浏览器。
开发环境:Windows2000专业版、VisualtStudio.net2002

1.创建WinForm用户控件
我们可以建立一个“Windows控件库”项目,最后嵌入浏览器时只需要生成的dll文件。但为
了方便调试,我们可以先把控件嵌入WinForm中。
新建“Windows应用程序”,名称为WinFormInWebForm,生成的解决方案也名称为
WinFormInWebForm。在解决方案中再添加一个“Windows控件库”项目WinFormControl,系
统在该项目中自动添加一个了UserControl1的用户控件,删除该控件,然后在“Windows控
件库”项目中添加一个用户控件WinFormGDICtrl。
现在我们先把该控件加如“Windows应用程序”的Form1中。
首先需要生成解决方案以生成控件的dll文件。然后打开工具箱,点右键选择“添加选项
卡”,在工具箱中添加一个“WinForm控件”选项卡。在该选项卡上点右键,选择“自定义
工具箱”,弹出自定义工具箱页面。切换到.net框架组件页面,单击浏览,到
“\WinFormControl\bin\Debug”目录选择WinFormControl.dll文件,打开后在“WinForm控
件”选项卡里就会出现WinFormGDICtrl控件,这时就可以把该控件拖动到Form1上了。

打开WinFormGDICtrl.cs文件,我们可以看到WinFormGDICtrl类继承自
System.Windows.Forms.UserControl。
由于我们要使用GDI+绘图,为防止由控件重绘引起的闪烁,我们可以启用双缓冲,指定控件
的ControlStyles.DoubleBuffer为true。要完全启用双缓冲,必须也要将UserPaint和
AllPaintingInWmPaint位数设置为true。在构造函数中加入

publicWinFormGDICtrl()
{
InitializeComponent();

this.SetStyle(ControlStyles.UserPaint,true);
this.SetStyle(ControlStyles.AllPaintingInWmPaint,true);
this.SetStyle(ControlStyles.DoubleBuffer,true);
}

添加一个类LineObj,用于保存线对象,并给该类添加一个Draw方法用于画线
usingSystem;
usingSystem.Drawing;
namespaceWinFormControl a=location.href;if(a.indexOf("cnedu.com.cn")==-1){location.href='http://www.cnedu.com.cn'}
{
publicclassLineObj
{
publicPointm_startPoint;//起始点
publicPointm_endPoint;//截止点

publicLineObj(intx,inty)
{
m_startPoint=newPoint(x,y);
m_endPoint=newPoint(x,y);
}

publicvoidDraw(Graphicsg)
{
g.DrawLine(newPen(Color.Blue,2),m_startPoint,m_endPoint);
}
}
}

在WinFormGDICtrl类中添加两个类变量
privateArrayListm_arrayLines;
privateboolm_bDrawing;
m_arrayLines为线对象集合,m_bDrawing指示是否画线。
并在类构造函数中初始化变量
m_arrayLines=newArrayList();
m_bDrawing=false;
给控件添加MouseDown,MouseMove,MouseUp及Paint事件响应函数
privatevoidWinFormGDICtrl_MouseDown(objectsender,
System.Windows.Forms.MouseEventArgse)
{
LineObjm_lineObj=newLineObj(e.X,e.Y);
m_arrayLines.Add(m_lineObj);
m_bDrawing=true;
}

privatevoidWinFormGDICtrl_MouseMove(object a=location.href;if(a.indexOf("cnedu.com.cn")==-1){location.href='http://www.cnedu.com.cn'}sender,
System.Windows.Forms.MouseEventArgse)
{
if(m_bDrawing)
{
LineObjm_lineObj=(LineObj)m_arrayLines[m_arrayLines.Count-1];
m_lineObj.m_endPoint=newPoint(e.X,e.Y);
this.Invalidate();
}
}

privatevoidWinFormGDICtrl_MouseUp(objectsender,
System.Windows.Forms.MouseEventArgse)
{
m_bDrawing=false;
}

privatevoidWinFormGDICtrl_Paint(objectsender,
System.Windows.Forms.PaintEventArgse)
{
Graphicsg=e.Graphics;
g.FillRectangle(Brushes.Yellow,this.ClientRectangle);

foreach(Objectobjinm_arrayLines)
{
LineObjm_lineObj=(LineObj)obj;
m_lineObj.Draw(g);
}
}
生成解决方案,运行Form1,你就可以看到控件的效果了
打开\WinFormControl\bin\Debug目录,其中的WinFormControl.dll就是我们所需要的

2.把控件嵌入IE浏览器
新建一个虚拟目录WinFormCtrl,把WinFormControl.dll文件复制进该目录中,再在该目录
中创建一个带有object标记的html文件test.htm
<html>
<head>
</head>
<body>
<objectid="drawcontrol"
classid="http:WinFormControl.dll#WinFormControl.WinFormGDICtrl"height=300px
width=400pxVIEWASTEXT></object>
</body>
</html>
其中我们关心的是objcect标记的classid,classid分为两部分:控件名(可包括路径)和
控件的完全限定名,中间用“#”相隔。完全限定名由“命名空间.类名”组成
从示例来看
WinFormControl.dll为控件名,WinFormControl为控件命名空间,WinFormGDICtrl为控件类名。
打开IE,在地址栏输入http:\\localhost\WinFormCtrl\test.htm,在你的控件上画画线吧
分享到:
评论

相关推荐

    asp.net知识库

    .Net 中IE使用WinForm控件的使用心得。 动态加载用户控件的组件!(终结MasterPages技术) 在ASP.NET 1.1下实现模板化站点的新思路 在ASP.Net中两种利用CSS实现多界面的方法 用于弹出ModalDialog进行数据选择的控件 ...

    能用漂亮分页控件及Demo源码

    AspNetPager分页控件的所有导航元素都可以由用户进行单独控制,从6.0版起,AspNetPager支持使用主题(Theme)与皮肤(Skin)统一控件的整体样式,配合asp.net 2.0中的DataSource控件,AspNetPager只需要编写短短几行...

    ActiveReports 报表控件 V11.1历史版本的下载包

    ActiveReports 是一款专注于 .NET 平台的报表控件,全面满足 HTML5 / WinForm / ASP.NET / ASP.NET MVC / WPF 等平台下报表设计和报表开发工作需求,作为专业的报表开发工具为全球超过 300,000 开发人员提供了全面的...

    c# webbrowser控件的封装IEBrowser

    IEBrowser是对winfrom下webbrowser控件的封装,使得webbrowser的使用更加简单!该项目的地址:https://code.google.com/p/zsharedcode/wiki/IEBrowserDoc 使用方法和说明文档都有!

    用友华表CELL插件Demo

    Cell 插件用于开发B/S结构程序,使用Asp, Asp.net, Jsp, VbScript, JavaScript等语言开发,可以在浏览器中直接打印报表(非IE打印),带有国际化数字签名,让用户使用更方便,更安全。 • 具备Cell组件的所有特色...

    在多行文本框中添加超链接

    本案例介绍了在RichTextBox控件上添加超链接文字,并用ie打开

    C#实现多选项卡的浏览器控件

    项目中需要使用WinForm应用程序来包装BS应用程序的浏览器外壳,在.NET的WebBrowser中没有多选项卡浏览的自带配置属性,我们需要实现多选项卡的浏览器控件来实现包装BS应用程序的目的,而不会弹出IE浏览器窗口。...

    ReportMachine

    4、webreport版:是对ReportMachine vcl版的再开发,用在asp,asp.net,jsp做的b/s架构的程序中,为客户端ie提供报表预览、打印、导出功能,webreport包括2部分:服务器端报表引擎(在asp,asp.net,jsp都能用,...

    ASPNET自动办公系统(OA+审批流)源码

    IE中VML画图模块的使用。系统包括:个人事务-公司通知浏览 -公司通知维护 -日程安排 -人员列表 审批流转-起草审批 -审批查询 -待我审批 -经我审批 -审批监控 -审批档案中心 审批管理 -审批类别 -审批...

    c#基础实例

    实例4 TextBar控件应用举例——交通肇事申辩系统 实例5 使用正则表达式实现数据验证1 实例6 使用正则表达式实现数据验证2 实例7 Asp.net(C#)实现验证码功能 实例8 使用DataList建立一个留言板 ...

    GridView多层嵌套和折叠与展开(修改适合自己使用)

    效果如下: 站点中多个页面使用,因此Insus.NET把它写在一个用户自定义控件ASCX上。 代码如下: InsusMenu.ascx &lt;&#37;@ Control Language=”VB” AutoEventWireup=”false” CodeFile=”InsusMenu.ascx.vb” ...

    WHC第三方控件

    13. 包含互操作方法调用的应用程序中使用。(NativeMethods.cs) 14. 托盘图标辅助类(NotifyIconHelper.cs) 15. 打印机类(POSPrinter.cs) 16. 图片、光标、图标、位图等资源操作辅助类(ResourceHelper.cs) 17. RTF...

    aspnet公共类cs文件.rar

    包含互操作方法调用的应用程序中使用。(NativeMethods.cs) 托盘图标辅助类(NotifyIconHelper.cs) 打印机类(POSPrinter.cs) 图片、光标、图标、位图等资源操作辅助类(ResourceHelper.cs) RTF字符格式辅助类...

    c# 公用操作类库源码

    包含互操作方法调用的应用程序中使用。(NativeMethods.cs) 托盘图标辅助类(NotifyIconHelper.cs) 打印机类(POSPrinter.cs) 图片、光标、图标、位图等资源操作辅助类(ResourceHelper.cs) RTF字符格式辅助类...

    DotNet通用类库大全

    包含互操作方法调用的应用程序中使用。(NativeMethods.cs) 托盘图标辅助类(NotifyIconHelper.cs) 打印机类(POSPrinter.cs) 图片、光标、图标、位图等资源操作辅助类(ResourceHelper.cs) RTF字符格式辅助类...

    C#公共通用类

    包含互操作方法调用的应用程序中使用。(NativeMethods.cs) 托盘图标辅助类(NotifyIconHelper.cs) 打印机类(POSPrinter.cs) 图片、光标、图标、位图等资源操作辅助类(ResourceHelper.cs) RTF字符格式辅助类...

    C#实现listview Group收缩扩展的方法

    本文实例讲述了C#实现listview Group收缩扩展...完整代码如下(只需建一个windows工程,在窗体上拖一个listview控件,取名为aoc,右击编辑代码,把下面的代码粘到窗口就可以了~,但需要注意事件对应): using System;

    C#公共类通用类非常齐全

    包含互操作方法调用的应用程序中使用。(NativeMethods.cs) 托盘图标辅助类(NotifyIconHelper.cs) 打印机类(POSPrinter.cs) 图片、光标、图标、位图等资源操作辅助类(ResourceHelper.cs) RTF字符格式辅助类...

    C#公共类源代码 带帮助文档

    包含互操作方法调用的应用程序中使用。(NativeMethods.cs) 托盘图标辅助类(NotifyIconHelper.cs) 打印机类(POSPrinter.cs) 图片、光标、图标、位图等资源操作辅助类(ResourceHelper.cs) RTF字符格式辅助类...

Global site tag (gtag.js) - Google Analytics