Création d'un activex en utilsant un usercontrol dotnet csharp

Soyez le premier à donner votre avis sur cette source.

Vue 6 558 fois - Téléchargée 502 fois

Description

Cet article démontre la création d'un ActiveX utilsant un UserControl DotNet Csharp avec Visual Studio (2005). L'exemple contient l'utilisation des fonctionnalités ActiveX: Propriétés, méthodes et événements.

Source / Exemple :


using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Text;
using System.Windows.Forms;

// Add references
using System.Runtime.InteropServices;
using System.IO;
using System.Reflection;
using Microsoft.Win32;

namespace CsharpWindowsActiveX
{

    [ProgId("CsharpWindowsActiveX.ActiveXUserControl")]
    [ClassInterface(ClassInterfaceType.AutoDual), ComSourceInterfaces(typeof(UserControlEvents))]
    public partial class ActiveXUserControl : UserControl
    {
        public ActiveXUserControl()
        {
            InitializeComponent();
        }

        // register COM ActiveX object
        [ComRegisterFunction()]
        public static void RegisterClass(string key)
        {
            StringBuilder skey = new StringBuilder(key);
            skey.Replace(@"HKEY_CLASSES_ROOT\", "");

            // récupérer GUID depuis ProgID="CsharpWindowsActiveX.ActiveXUserControl"
            Type myType1 = Type.GetTypeFromProgID("CsharpWindowsActiveX.ActiveXUserControl");
            Console.WriteLine("ProgID=CsharpWindowsActiveX.ActiveXUserControl GUID={0}.", myType1.GUID);

            // ecrire GUID dans un fichier txt
            TextWriter tw;
            tw = File.CreateText("guid.txt");
            tw.WriteLine(skey.ToString());
            tw.WriteLine(myType1.GUID.ToString());
            tw.Close();

            RegistryKey regKey = Registry.ClassesRoot.OpenSubKey(skey.ToString(), true);
            RegistryKey ctrl = regKey.CreateSubKey("Control");
            ctrl.Close();
            RegistryKey inprocServer32 = regKey.OpenSubKey("InprocServer32", true);
            inprocServer32.SetValue("CodeBase", Assembly.GetExecutingAssembly().CodeBase);
            inprocServer32.Close();
            regKey.Close();
        }

        // Unregister COM ActiveX object
        [ComUnregisterFunction()]
        public static void UnregisterClass(string key)
        {
            StringBuilder skey = new StringBuilder(key);
            skey.Replace(@"HKEY_CLASSES_ROOT\", "");
            RegistryKey regKey = Registry.ClassesRoot.OpenSubKey(skey.ToString(), true);
            regKey.DeleteSubKey("Control", false);
            RegistryKey inprocServer32 = regKey.OpenSubKey("InprocServer32", true);
            regKey.DeleteSubKey("CodeBase", false);
            regKey.Close();
        }

        // ActiveX properties (Get/Set) //////////////////////////////////////////////////////////////////
        private int ptextVal;

        public int TextVal
        {
            get 
            {
                ptextVal = (int)(numericUpDown1.Value);
                return ptextVal; 
            }
            set
            {
                ptextVal = value;
                numericUpDown1.Value = ptextVal;
            }
        }

        // ActiveX methods/functions //////////////////////////////////////////////////////////////////
        public interface ICOMCallable
        {
            int GetTextBoxValue();
        }

        public int GetTextBoxValue()
        {
            int i = (int)(numericUpDown1.Value);
            MessageBox.Show("ActiveX method: GetTextBoxValue " + i.ToString());
            return (i);
        }

        // Eventhandler interface  //////////////////////////////////////////////////////////////////
        public delegate void ControlEventHandler(int NumVal);

        [Guid("0A415E38-372F-45fb-813B-D9558C787EA0")]
        [InterfaceType(ComInterfaceType.InterfaceIsIDispatch)]
        public interface UserControlEvents
        {
            [DispId(0x60020001)]
            void OnButtonClick(int NumVal);
        }

        public event ControlEventHandler OnButtonClick;

        private void buttonOK_Click(object sender, EventArgs e)
        {
            int NumVal;

            if (OnButtonClick != null)
            {
                NumVal = (int)(numericUpDown1.Value);
                OnButtonClick(NumVal);
            }
        }

                       
        // //////////////////////////////////////////////////////////////////

 
    }
}

Codes Sources

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.