用C#编写ActiveX控件(三)

那么让我们详细讲解一下"用C#编写ActiveX控件(三)"的完整攻略。

什么是ActiveX控件

ActiveX是一种软件组件技术,它允许应用程序在多个不同的操作系统和应用程序之间共享代码。ActiveX控件是一种可以在Web浏览器中嵌入的交互式控件。

为什么用C#编写ActiveX控件

C#是一种非常流行的编程语言,它有着丰富的库和框架,同时也具有强大的面向对象编程能力,使得它成为了编写ActiveX控件的理想语言之一。

编写ActiveX控件的步骤

编写ActiveX控件的步骤可以分为以下几步:

  1. 创建一个新的C#类库项目。
  2. 在C#类库项目中添加一个类,并将该类继承自AxHost类。
  3. 在该类中添加一些属性和事件,并且将这些属性和事件标记为COM可访问。
  4. 对该类进行编译和注册。
  5. 在Web应用程序中使用该ActiveX控件。

下面给出两个示例来帮助理解这些步骤。

示例一

在此示例中,我们将创建一个ActiveX控件,该控件可以创建一个简单的按钮并在单击按钮时触发一个事件。

  1. 首先,创建一个新的C#类库项目。
  2. 然后,添加一个名为"SimpleButton"的类,并将其继承自AxHost类。
using System.Runtime.InteropServices;

namespace SimpleButtonLibrary
{
    [ProgId("SimpleButtonLibrary.SimpleButton")]
    [ClassInterface(ClassInterfaceType.AutoDispatch)]
    [ComVisible(true)]
    public class SimpleButton : AxHost
    {
        public SimpleButton() : base("8856f961-340a-11d0-a96b-00c04fd705a2")
        {
        }

        public event EventHandler Click;

        [ComVisible(true)]
        public void DoClick()
        {
            Click?.Invoke(this, EventArgs.Empty);
        }
    }
}

在这个示例中,我们定义了一个名为SimpleButton的类,并使用AXHost类作为基类。我们还在SimpleButton类中添加了一个名为Click的事件,并为其添加了一个DoClick方法。

  1. 接下来,需要为 SimpleButton 的属性和事件添加 COM 属性。
[Guid("D1848D3C-C990-4BCF-AB28-B0BB3D45E9D9")]
[InterfaceType(ComInterfaceType.InterfaceIsIDispatch)]
[ComVisible(true)]
public interface ISimpleButton
{
    [DispId(1)]
    string Text { get; set; }

    [DispId(2)]
    event EventHandler Click;
}

[Guid("2112D149-D916-44E4-A6A5-52C47468F8BD")]
[ClassInterface(ClassInterfaceType.None)]
[ComVisible(true)]
[ProgId("SimpleButtonLibrary.SimpleButton")]
public class SimpleButton : AxHost, ISimpleButton
{
    public SimpleButton() : base("8856f961-340a-11d0-a96b-00c04fd705a2")
    {
    }

    public event EventHandler Click;
    public string Text { get; set; }

    [ComVisible(true)]
    public void DoClick()
    {
        if (Click != null)
        {
            Click(this, EventArgs.Empty);
        }
    }
}
  1. 接下来,对 SimpleButton 类进行编译并进行注册,然后使用以下代码来在Web应用程序中实例化和使用 SimpleButton 控件。
<!DOCTYPE html>
<html>
<head>
    <title>SimpleButton Test Page</title>
    <script type="text/javascript">
        function testClick() {
            simpleButton.DoClick();
        }
    </script>
</head>
<body>
    <object id="simpleButton" classid="clsid:2112D149-D916-44E4-A6A5-52C47468F8BD"></object>
    <button onclick="testClick()">Click me</button>
    <script type="text/javascript">
        document.getElementById("simpleButton").Text = "Hello, World!";
        document.getElementById("simpleButton").Click = function () {
            alert('Button clicked!');
        }
    </script>
</body>
</html>

在这个示例中,我们将 SimpleButton 注册为一个 COM 组件,然后在网页中使用,我们可以设置 SimpleButton 的 Text 属性,并在单击按钮时触发 Click 事件。

示例二

在此示例中,我们将创建一个更复杂的 ActiveX 控件,该 ActiveX 控件将呈现图形并支持用户输入。

  1. 创建一个新的 C# 类库项目并命名为"SimpleGraphControlLib"。
  2. 在 SimpleGraphControlLib 项目中添加一个名为"SimpleGraphControl"的类,并将其继承自 AxHost 类。
namespace SimpleGraphControlLib
{
    [Guid("5DA511D5-3F97-438A-A4D3-22E8757C81E2")]
    [InterfaceType(ComInterfaceType.InterfaceIsIDispatch)]
    [ComVisible(true)]
    public interface ISimpleGraphControl
    {
        [DispId(1)]
        void LoadData(double[] x, double[] y);

        [DispId(2)]
        string Title { get; set; }

        [DispId(3)]
        string XAxisLabel { get; set; }

        [DispId(4)]
        string YAxisLabel { get; set; }
    }

    [Guid("7E7E8BF6-36DB-45E5-B371-A4363668F230")]
    [ClassInterface(ClassInterfaceType.None)]
    [ComSourceInterfaces(typeof(ISimpleGraphControl))]
    [ComVisible(true)]
    [ProgId("SimpleGraphControlLib.SimpleGraphControl")]
    public partial class SimpleGraphControl : AxHost, ISimpleGraphControl
    {
        private readonly GraphForm graphForm;

        public SimpleGraphControl() : base("8250f4ec-dede-46c6-8a9e-bc8a58ed04b9")
        {
            graphForm = new GraphForm();
        }
        ...
    }
 }
  1. 接下来,定义 SimpleGraphControl 类的一些属性和方法:
public void LoadData(double[] x, double[] y)
{
    graphForm.LoadData(x, y);
}

public string Title
{
    get { return graphForm.Title; }
    set { graphForm.Title = value; }
}

public string XAxisLabel
{
    get { return graphForm.XAxisLabel; }
    set { graphForm.XAxisLabel = value; }
}

public string YAxisLabel
{
    get { return graphForm.YAxisLabel; }
    set { graphForm.YAxisLabel = value; }
}

public void ShowGraph()
{
    graphForm.ShowDialog();
}

其中,LoadData 方法用于加载数据;Title、XAxisLabel 和 YAxisLabel 用于设定标题、X轴标签和Y轴标签;ShowGraph 方法用于显示绘图窗口。

  1. 对 SimpleGraphControl 类进行编译并进行注册,然后使用以下代码来在 Web 应用程序中实例化和使用 SimpleGraphControl 控件。
<!DOCTYPE html>
<html>
<head>
    <title>SimpleGraphControl Test Page</title>
</head>
<body>
    <object id="simpleGraphControl" classid="clsid:7E7E8BF6-36DB-45E5-B371-A4363668F230"></object>
    <script type="text/javascript">
        var simpleGraphControl = document.getElementById("simpleGraphControl");
        var x = [1, 2, 3, 4, 5, 6, 7, 8];
        var y = [0, 5, 10, 8, 13, 17, 14, 20];

        simpleGraphControl.LoadData(x, y);
        simpleGraphControl.Title = "My Graph";
        simpleGraphControl.XAxisLabel = "X Values";
        simpleGraphControl.YAxisLabel = "Y Values";
        simpleGraphControl.ShowGraph();
    </script>
</body>
</html>

在这个示例中,我们将 SimpleGraphControl 注册为一个 COM 组件,然后在网页中使用,我们可以调用 LoadData 方法来加载数据,设置标题和轴标签,最后显示绘图窗口。

这两个例子介绍了如何在C#中编写ActiveX控件,其中第一个示例创建了一个简单的按钮,第二个示例创建了一个更复杂的图形控件。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:用C#编写ActiveX控件(三) - Python技术站

(0)
上一篇 2023年6月7日
下一篇 2023年6月7日

相关文章

  • CAD二次开发,安装程序中写注册表

    一、加载dll时写注册表 我们知道,dll加载到cad中后使用 HostApplicationServices.Current.RegistryProductRootKey() 就可以拿到当前cad的注册表,那么如果想在安装程序时写,此时并没有cad的环境,要怎么办呢? 二、获取所有已安装的cad的注册表路径 cad在安装后,会在注册表的计算机\HKEY_L…

    C# 2023年4月17日
    00
  • 深入理解C#泛型:new与where关键字全解析

    C#泛型中new和where是重要的关键字,它们都可以用于约束泛型类型参数的限制;它们都用于提高代码的安全性和可用性,它们的作用在很大程度上提高了代码的可读性和可维护性。在这篇文章中,我们将一起了解泛型中的new和where,以及它们之间的区别。 1. new关键字 在C#泛型中,new关键字被用于指定泛型类型参数必须具有公共的无参数构造函数。 使用new关…

    C# 2023年4月25日
    00
  • C#环形缓冲区(队列)完全实现

    感谢您对C#环形缓冲区(队列)的关注。在这里,我将为您提供一份详细的攻略,让您可以快速入门并掌握C#环形缓冲区(队列)的完全实现。 简介 环形缓冲区,也称为环形队列,是一种非常重要的数据结构,它有很多应用场景,例如缓冲区、循环播放、事件队列等。 C#环形缓冲区是一种很常见的环形队列实现方式。它提供了一系列方法来方便地添加或者移除元素,以及遍历整个队列和判断队…

    C# 2023年5月15日
    00
  • C#使用Enum.TryParse()实现枚举安全转换

    当我们需要将字符串或整数等类型转换为枚举类型时,可以使用C#提供的Enum.TryParse()方法来实现安全转换,避免了在转换时可能会抛出异常的情况。 什么是枚举类型 枚举类型是一种特殊的值类型(Value Type),它限定了该类型变量只能是预先定义好的枚举值中的一种。枚举类型可以在程序中用于表示特定的常量值,例如星期几、性别等。 Enum.TryPar…

    C# 2023年5月14日
    00
  • C#把DataTable导出为Excel文件

    关于如何使用C#把DataTable导出为Excel文件,下面是一份详细的攻略: 1. 添加依赖库 使用Excel需要引入Office.dll,如果没有安装Microsoft Office,可以通过NuGet安装Microsoft.Office.Interop.Excel: Install-Package Microsoft.Office.Interop.E…

    C# 2023年5月31日
    00
  • Visual Studio 2017 RC 初探安装教程

    Visual Studio 2017 RC是微软发布的一款集成开发环境,它提供了丰富的工具和功能,可以帮助开发人员更快速、更高效地开发应用程序。在本攻略中,我们将介绍如何安装Visual Studio 2017 RC。 步骤一:下载Visual Studio 2017 RC 首先,需要下载Visual Studio 2017 RC。可以在微软官网上下载Vis…

    C# 2023年5月17日
    00
  • c# WPF如何实现滚动显示的TextBlock

    要实现滚动显示的TextBlock,可以使用WPF中的ScrollViewer和TextBlock结合使用。ScrollViewer是一个滚动视图容器,可以将其在需要滚动的控件周围包装起来,从而实现滚动效果。 下面是实现过程: 第一步:在XAML文件中,在需要滚动显示的TextBlock周围加入ScrollViewer容器,同时设置VerticalScrol…

    C# 2023年6月6日
    00
  • 基于John Carmark密码详解

    基于John Carmack密码详解 什么是John Carmack密码? John Carmack密码,也称为“DooM3密码”,是由游戏开发者John Carmack在2004年所创造的密码。这种密码的特点在于:使用了MD5哈希加密算法,并且还有一些特殊的操作。 John Carmack密码的组成 John Carmack密码由以下几个部分组成: 一个固…

    C# 2023年6月7日
    00
合作推广
合作推广
分享本页
返回顶部