User ID:
Password:
Remember Me:
Forgot Password?
Not a member?
Click here for more information and to register.

    Create an ActiveX using a Csharp Usercontrol



    This article is about creating ActiveX controls using a DotNet Usercontrol in Csharp. You can design all ActiveX features like: properties, methods and events.

    Environment:  Visual Studio(2005) Csharp

    How to Do This

    1. Create a Usercontrol using Visual Studio (C#):


    (Full Size Image)

    2. Configure the project properties:


    (Full Size Image)

    3. Modify the usercontrol interface:

    Note: Make sur you added the EVENTS class:   [ClassInterface(ClassInterfaceType.AutoDual), ComSourceInterfaces(typeof(UserControlEvents))]
    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.Reflection;
    using Microsoft.Win32;

    namespace CsharpWindowsActiveX
    {

                [ProgId("CsharpWindowsActiveX.ActiveXUserControl")]
                [
    ClassInterface(ClassInterfaceType.AutoDual), ComSourceInterfaces(typeof(UserControlEvents))]

                public partial class ActiveXUserControl : UserControl
               
    {

                        public ActiveXUserControl()
                        {
                             InitializeComponent();
                        }

                         .....

     

    4. Add the register/unregister section in the source code

    // register COM ActiveX object

    [ComRegisterFunction()]
    public static void RegisterClass(string key)
    {
                   StringBuilder skey = new StringBuilder(key);
                  skey.Replace(
    @"HKEY_CLASSES_ROOT\", "");
                 
    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();
    }


    [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();
    }

     

     

    5. Add an ActiveX property:

    // ActiveX properties (Get/Set) //////////////////////////////////////////////////////////////////

    private int ptextVal;
    public int TextVal
    {
          
    get
           {
                      ptextVal = (
    int)(numericUpDown1.Value);
                     
    return ptextVal;
            }
           
    se
    t
           {

                ptextVal = value;
                    numericUpDown1.Value = ptextVal;
             }
    }

     

     

     

    6. Add an ActiveX method:

    // 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);
    }

     

     

    7. Add an ActiveX event:

    // 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);
             }
    }

     

     

     

    8. Register the ActiveX on your PC:

    Register the new ActiveX on your computer using the command:  RegAsm.exe CsharpWindowsActiveX.dll

    9. Test your ActiveX:

    Use the TSTCon32.exe tool from Visul Studio to test the ActiveX:


    (Full Size Image)


    (Full Size Image)

     

    Downloads

  • CsharpWindowsActiveX_demo.zip
  • CsharpWindowsActiveX_src.zip

  • IT Offers


    Top Authors