研究了一阵子C#版WorldWind,大家知道WorldWind是桌面程序,突然提了一个新需求,就是在IE里面运行WorldWind,对于java版的WorldWind来说可能比较容易,C#版的还真费神,我的做法是把WorldWindow以及自己的写的插件全部封装在一个winform自定义控件中,然后再把这个控件加载到webform上,效果非常好。

现在写一个简单的例子总结一下winform自定义控件在webform上使用的步骤。

一、制作winform自定义控件。

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Text;
using System.Windows.Forms;

using System.Runtime.InteropServices;


namespace EventSourceCtrl
{

    public delegate void Start(Boolean Restart);
    public delegate void Stop();
    public delegate void Pause();

    [GuidAttribute("1A585C4D-3371-48dc-AF8A-AFFECC1B0967")]
    [InterfaceTypeAttribute(ComInterfaceType.InterfaceIsIDispatch)]
    public interface ButtonEvents
    {
        [DispId(0)]
        void DoStart(Boolean Restart);
        [DispId(1)]
        void DoStop();
        [DispId(2)]
        void DoPause();
    }

    public interface IDoNetEventInScript
    {
        void SetCaption(string Value);
    }

    [ComVisible(true)]
    [ClassInterface(ClassInterfaceType.None)]
    [ComSourceInterfaces(typeof(ButtonEvents))]
    [Guid("5649B9CC-07BA-432a-A392-532EE2AFD190")]
    public partial class sourceCtrl : UserControl, IDoNetEventInScript
    {

        public event Start DoStart;
        public event Stop DoStop;
        public event Pause DoPause;

        public sourceCtrl()
        {
            InitializeComponent();
        }

        private void button1_Click_1(object sender, EventArgs e)
        {
            if (DoStart != null)
            {
                DoStart(true);
            }
        }

        private void button2_Click(object sender, EventArgs e)
        {
            if (DoPause != null)
            {
                DoPause();
            }
        }

        private void button3_Click(object sender, EventArgs e)
        {
            if (DoStart != null)
            {
                DoStart(false);
            }
        }

        private void button4_Click(object sender, EventArgs e)
        {
            if (DoStop != null)
            {
                DoStop();
            }
        }

        IDoNetEventInScript 成员
    }
}

超级简单的一个例子,没什么好说的,要注意的是控件类前面的几个属性[ComVisible(true)]和[Guid("5649B9CC-07BA-432a-A392-532EE2AFD190")]是必须的。

二、用Visual Studio 2005命令提示注册控件到全局缓存,注意用windows的cmd.exe进行注册不行,不认识命令。

注册命令是:regasm /codebase fullpath,其中codebase是必须的,要不然即使注册成功也不会在IE上显示。如图:


三、将注册好的控件放在网页上

<html>
    <head>
        <title>DotNetEventInScript</title>
    </head>
    <body>
        <object id= "eventSource"classid="clsid:5649B9CC-07BA-432a-A392-532EE2AFD190" width=100% height=100% align=alClient>
        </object>
        <script type="text/javascript">
            function eventSource::DoStart(Restart)
            {
                alert("DoStart");
            }
            function eventSource::DoStop()
            {
                alert("DoStop");
            }
            function eventSource::DoPause()
            {
                alert("DoPause");
            }
        </script>
    </body>
</html>

测试看看,效果不错吧!

转载于:https://www.cnblogs.com/top5/archive/2010/03/25/1696210.html

Winform自定义控件在网页上的应用相关推荐

  1. 从“在winform里打开网页功能”引发的问题探究

    今天有个同事问了一下我,怎么在winform里面打开网页啊?我们都是基于B/S的开发,很少接触winform,所以我当时就懵了,实在不知道怎么回答,所以索性说不知道.但是我又想了想,这个应该是个很简单 ...

  2. (三十二)c#Winform自定义控件-表格

    前提 入行已经7,8年了,一直想做一套漂亮点的自定义控件,于是就有了本系列文章. GitHub:https://github.com/kwwwvagaa/NetWinformControl 码云:ht ...

  3. html5调用本地控件exe,网页上如何判断本地是否安装某个应用程序(js实现)

    @顾晓北: 你可能没说清楚,网页启动客户端检测客户端,项目由网页部分及客户端程序部分组成,网页上有一个进入按钮,如果客户端安装了,点击按钮直接打开客户端程序,如果未安装则提示消息提醒安装客户端程序,类 ...

  4. asp.net实现在网页上自动显示超链接以及Email地址

    人们总喜欢在帖子中加上各种有用的URL链接或Email地址.而笔者当初设计时没有考虑到这一点,使得这些URL链接或Email地址只能以文字的形式而并不是以超链接的形式显示,其它浏览帖子的人还必须把这些 ...

  5. 使用php读写mysql数据库并显示到网页上

    由于工作的原因,需要了解下bs模式下的读写数据库的流程,将试验过程梳理一下. 我采用的是phpstudy搭建数据库,mysql数据库已经搭建完成,名称为2018版本,如下图: 由于我前期安装过apac ...

  6. java 使用正则表达式从网页上提取网站标题

    如何从网页上抓取有价值的东西?看懂了下面的程序(非常简单),想从网页上抓取什么信息(标题.内容.Email.价格等)就能抓取什么信息. package catchhtml; import java.i ...

  7. [IE技巧] 禁止/允许显示网页上Flash的小插件

    一个很小的插件工具, 用于禁止/允许显示网页上的Flash: http://flash.melameth.com/togflash.html  转载于:https://blog.51cto.com/w ...

  8. 如何从网页上下载Flash?

    不知道大家是否遇到过,因为看到某个网页上精美的FLASH而苦于无法下载呢?不像图片之类的可以点右键,然后图片另存为就可以很顺利的保存下来.而在FLASH上点右键却保存不了,很是郁闷.现在就向大家介绍两 ...

  9. 3D模型在网页上显示

    3D模型在网页上显示,这绝对是未来的趋势,也是热门.一部"阿凡达"让电影节发生了一次地震,让人们感到3D的时代到来.那么我们IT界呢?如果各位因工作时间繁忙,或者嫌上海世博会人山人 ...

  10. HTML5网页上播放mp4失败的原因

    HTML5网页上播放mp4失败的原因 这个不错: https://blog.csdn.net/jacke121/article/details/84568802 解决方法1: FFMPEG  -i   ...

最新文章

  1. 统计字符串中指定字符出现次数(Java)
  2. NHibernate 中删除数据的几种方法
  3. Linux C编程--进程介绍1--进程的创建
  4. 在NOILINUX下的简易VIM配置
  5. PowerBI新功能: 自定义数据连接器(Data Connector)
  6. lenovo L480 进入bios_重装系统重启后不引导,重装系统无法进入引导
  7. python爬取qq音乐周杰伦_Python爬取20万条评论,告诉你周杰伦为啥弄崩QQ音乐?
  8. 树莓派3开wifi热点
  9. 【小白学PyTorch】5.torchvision预训练模型与数据集全览
  10. 3des加密 java php_php 3DES加密如何兼容Java
  11. iview代码片段 去除水平menu底部横线
  12. 程序员专属精美简历合集—第二弹
  13. MySQL多表数据记录查询详解
  14. [Java] 蓝桥杯ALGO-98 算法训练 数位分离
  15. 查询工资最低的3名员工的职工工号、姓名和收入_2018年31省最低工资排名!武汉工资低于这个数就违法!...
  16. 基于layui 下拉多选 三级联动省市区demo
  17. wpf-折线图绘制2-oxyplot-3-修饰图像(注释)
  18. win10注册表的备份与恢复;对“未将所有数据都成功写入到注册表中。某些项是由系统或其他进程打开的,或者你没有足够的权限执行此操作”问题的理解
  19. thymeleaf 语法——th:text默认值、字符串连接、th:attr、th:href 传参、th:include传参、th:inline 内联、th:each循环、th:with、th:if
  20. c语言文件压缩怎么求压缩比,文件压缩C语言程序设计报告.doc

热门文章

  1. 售前十年,两种人生,多重感悟!
  2. Apache Kylin在美团数十亿数据OLAP场景下的实践
  3. StringBuilder 使用方法
  4. Github操作指南
  5. 支付宝报错:missing-signature 未设置签名参数
  6. 热文:if(a==1且a==2且a==3),有没有可能为true?
  7. 西部数据暂停与华为的合作关系及发货
  8. 互联网公司的黑话,你都经历过吗?
  9. 昨天,美团程序员的年终奖金可能没了!
  10. Google 投资了京东