• 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>

    测试看看,效果不错吧!

  • 相关阅读:
    面试题: 数据库 已看1 group by 和order by的练习 sql语句练习简单 有用
    笔试题: 数据库 已看1 一些关键的sql语句练习 和选择题 有用 sql语句练习 挺好
    面试题: mysql数据库 已看1 简单的sql练习
    面试题: mysql 数据库已看 sql安全性 索引 引擎 sql优化
    面试题: redis面试题 有用 redis详细
    面试题: mysql 数据库去重 已看1 不好使
    面试题: 数据库已看1 视图存储过程 没用
    面试题: mysql数据库 已看1 索引和事务 没用
    面试题: 数据库 oracle数据库 已看1 意义不大 有用
    LeetCode--Valid Palindrome
  • 原文地址:https://www.cnblogs.com/top5/p/1696210.html
Copyright © 2020-2023  润新知