研究了一阵子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. python创建csv文件并写入-Python 将数据写入文件(txt、csv、excel)
  2. 数据库系统概论:第二章 关系数据库
  3. poj3320Jessica's Reading Problem—尺取法(java)
  4. 双指针解决力扣两/三数之和问题
  5. REVERSE-PRACTICE-BUUCTF-13
  6. docker配置容器运行jar包
  7. 计算机专业能评电子工程师吗,计算机工程师职称 评定条件
  8. 【Flink】Flink 写入 kafka 报错 Failed to send data to Kafka: Expiring 4 record(s) for 20001 ms has passed
  9. 汕头创易计算机科技,汕头文创设计下一个“爆款”在哪?汕大优秀毕业生分享创作心得...
  10. Mongodb c#增删改查
  11. 如何调试SharePoint中XsltListViewWebPart的XSL
  12. DevExpress XtraGrid网格控件示例四:初始化新建行的单元格
  13. SQL Azure 服务器端架构
  14. 软件园区网络设计之网络详细设计
  15. 强大的火狐插件(转)
  16. 850pro测试软件,新极速霸主诞生 三星850 PRO首发评测
  17. 锁的等级:方法锁、对象锁、类锁
  18. 为浏览器添加Bing搜索引擎
  19. 质量功能配置(QFD)矩阵
  20. 电脑WIN XP蓝屏错误代码大全查询

热门文章

  1. 解决问题--java.lang.ClassNotFoundException -- redis抛出
  2. 教你编写高质量的 Java 代码!
  3. Spring MVC 中集成 Apache Shiro 安全框架
  4. 好开心,明天就上班了
  5. 不随意付钱,不随意签字。
  6. ubuntu13.10安装mysql_Ubuntu 10.10 源码安装MySQL 5.1.34
  7. pythonforeverybody中文版_PyTorch实现EverybodyDanceNow
  8. python人脸比对算法_Python的人脸识别,欧式距离比对,机器训练,人脸采集,离线识别...
  9. MyBatis 基础知识
  10. dedecms 中变量函数