zoukankan      html  css  js  c++  java
  • Winform自定义控件在网页上的应用

    研究了一阵子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命令提示注册控件到全局缓存,注意用windowscmd.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>

    测试看看,效果不错吧!

  • 相关阅读:
    每天一篇经济学人 2020-09-15 分享在 特朗普的“疫苗政治”:科学与政治之争 | 经济学人
    english notes
    new word
    gilbert strang
    news etc
    对自己的要求
    JDBC添加数据
    题目-1031-字符串反转
    题目-1002-字符串分类统计
    ERROR:格式化hdfs后,datanode只启动了一个
  • 原文地址:https://www.cnblogs.com/top5/p/1696210.html
Copyright © 2011-2022 走看看