How can I get events fired by an Office XP chart control hosted in my Windows Forms app?

To get these events instead of using event delegates, you can create a sink for the events by using the IConnectionPointContainer and IConnectionPoint interfaces of the Spreadsheet/Chart component. Here are two articles that you can check: HOWTO: Handle Office XP Spreadsheet Events in Visual C# .NET HOWTO: Handle Office XP Chart Events in Visual C# .NET Reply posted by Elan Zhou (MS) in microsoft.public.dotnet.framework.windowsforms.

How can I make sure there is only one instance of my application running

Saar Carmi shows how to do this in his sample found on C# Corner. In it, he uses the Process class in System.Diagnostics to implement this functionality using code such as [C#] public static Process RunningInstance() { Process current = Process.GetCurrentProcess(); Process[] processes = Process.GetProcessesByName (current.ProcessName); //Loop through the running processes in with the same name foreach (Process process in processes) { //Ignore the current process if (process.Id != current.Id) { //Make sure that the process is running from the exe file. if (Assembly.GetExecutingAssembly().Location.Replace(‘/’, ‘\\’) == current.MainModule.FileName) { //Return the other process instance. return process; } } } //No other instance was found, return null. return null; } [VB.NET] Public Shared Function RunningInstance() As Process Dim current As Process = Process.GetCurrentProcess() Dim processes As Process() = Process.GetProcessesByName(current.ProcessName) ’Loop through the running processes in with the same name Dim process As Process For Each process In processes ’Ignore the current process If process.Id <> current.Id Then ’Make sure that the process is running from the exe file. If [Assembly].GetExecutingAssembly().Location.Replace(‘/’, ‘\’) = current.MainModule.FileName Then ’Return the other process instance. Return process End If End If Next process ’No other instance was found, return null. Return Nothing End Function ’RunningInstance

How do you make .Net components that could be used by COM

The tool Regasm.exe can create a COM typelib and creates the necessary entries in the registry (the CLSID and Typelib ). If only a typelib is required, you can use tlbexp.exe. A com callable wrapper (CCW) will be created when a COM client (VB, VBS, JS, C++ etc.) creates an instance of a (managed) class.