用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日

相关文章

  • CommunityToolkit.Mvvm8.1 MVVM工具包安装引用指南(1)

      本系列文章导航 https://www.cnblogs.com/aierong/category/2297596.html     0.说明 CommunityToolkit.Mvvm包(又名MVVM 工具包,以前名为 Microsoft.Toolkit.Mvvm)是一个现代、快速且模块化的 MVVM 库。它支持:.NET Standard 2.0、 .…

    C# 2023年4月18日
    00
  • .NET Core项目使用swagger开发组件

    .NET Core项目使用Swagger开发组件 Swagger是一种用于描述RESTful Web服务的标准格式,它可以帮助我们生成API文档和客户端代码。在.NET Core项目中,我们可以使用Swagger来开发组件。本攻略将详细介绍如何在.NET Core项目中使用Swagger开发组件。 环境要求 在进行.NET Core项目使用Swagger开发…

    C# 2023年5月17日
    00
  • .NET Core读取配置文件

    下面是“.NET Core读取配置文件”的完整攻略: 1. 创建配置文件 首先,我们需要在项目中创建一个配置文件,以便存放我们需要读取的配置信息。配置文件可以是JSON、XML或INI等格式。这里我们以JSON格式作为示例,创建一个名为appsettings.json的文件,并在文件中添加配置信息。如下所示,我们添加了一个名为”ConnectionStrin…

    C# 2023年6月3日
    00
  • 详解C#通过反射获取对象的几种方式比较

    详解C# 通过反射获取对象的几种方式比较 概述 在 C# 中,有很多种方式获取对象,其中最常见的方式是使用 new 关键字实例化一个对象。但是在某些场景下,比如需要动态加载程序集或者需要通过配置文件指定对象类型等,就需要使用 C# 中的反射机制获取对象。 本文将详细讲解 C# 中使用反射机制获取对象的几种方式,并进行比较。 通过 Type 类型的静态方法获取…

    C# 2023年6月1日
    00
  • .NET垃圾回收GC诊断工具dotnet-gcmon使用

    在本文中,我们将详细讲解如何使用.NET垃圾回收(GC)诊断工具dotnet-gcmon,并提供两个示例说明。 准备工作 在开始之前,您需要安装以下软件: .NET Core SDK dotnet-gcmon 安装dotnet-gcmon 安装dotnet-gcmon。 dotnet tool install -g dotnet-gcmon 在上面的命令中,…

    C# 2023年5月16日
    00
  • ASP.NET Core中的Razor页面使用视图组件

    在 ASP.NET Core 中,可以使用 Razor 页面和视图组件来构建动态 Web 应用程序。视图组件是一种可重用的 UI 组件,可以在多个 Razor 页面中使用。以下是 ASP.NET Core 中 Razor 页面使用视图组件的完整攻略: 步骤一:创建视图组件 在使用视图组件前,需要创建视图组件。可以在 ASP.NET Core 项目中的 Vie…

    C# 2023年5月17日
    00
  • ASP.NET MVC中使用log4net的实现示例

    下面是ASP.NET MVC中使用log4net的实现示例的完整攻略。 准备工作 首先,我们需要在ASP.NET MVC项目中安装log4net包。在Visual Studio中,可以通过NuGet Package Manager来安装: 打开Visual Studio; 打开ASP.NET MVC项目; 在Solution Explorer中右键单击项目名…

    C# 2023年5月31日
    00
  • ASP.NET 2.0,C#—-图像特效处理

    ASP.NET 2.0 是一个使用 Microsoft .NET Framework 构建 Web 应用程序的开发平台,它可以通过 .NET Framework 提供的底层支持来操作和管理一些基础设施,其中包括图像特效处理。本攻略将围绕着 ASP.NET 2.0 和 C#,详细讲解图像特效处理。 创建 ASP.NET 2.0 项目 首先,在 Visual S…

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