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#):

2. Configure the project properties:

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:

 



Downloads

Comments

  • There are no comments yet. Be the first to comment!

Leave a Comment
  • Your email address will not be published. All fields are required.

Top White Papers and Webcasts

  • Live Event Date: April 22, 2014 @ 1:00 p.m. ET / 10:00 a.m. PT Database professionals — whether developers or DBAs — can often save valuable time by learning to get the most from their new or existing productivity tools. Whether you're responsible for managing database projects, performing database health checks and reporting, analyzing code, or measuring software engineering metrics, it's likely you're not taking advantage of some of the lesser-known features of Toad from Dell. Attend this live …

  • With JRebel, developers get to see their code changes immediately, fine-tune their code with incremental changes, debug, explore and deploy their code with ease (both locally and remotely), and ultimately spend more time coding instead of waiting for the dreaded application redeploy to finish. Every time a developer tests a code change it takes minutes to build and deploy the application. JRebel keeps the app server running at all times, so testing is instantaneous and interactive.

Most Popular Programming Stories

More for Developers

Latest Developer Headlines

RSS Feeds