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

  • Is your compliance strategy relying on disconnected processes and tools that leave your organization at risk? Do your security and operations teams run into conflicts--leading to a gap between audit and remediation? Now you can make even the most complex and dynamic IT infrastructure fully secure and compliant. Read this eBook and learn how to: Improve process and close the SecOps gap Quickly detect, audit and remediate breaches Create a more agile environment to comply to regulatory mandates Better …

  • Relying on outside companies to manage your network and server environments for your business and applications to meet the needs and demands of your users can be stressful. This is especially true as many Managed Hosting organizations fail to meet their service level agreements. Read this Forrester total economic impact report and learn what makes INetU different and how they exceed their customers' managed hosting expectations.

Most Popular Programming Stories

More for Developers

RSS Feeds

Thanks for your registration, follow us on our social networks to keep up-to-date