How to Capture Outlook Custom Form's Command Button Click event in COM Add-in using C#?
Use the following code snippets to wire an event in C# to capture the click event of the command button on the Outlook Custom Form.
1: /*NOTE: Following programming examples is for illustration only, without warranty either expressed or implied,
2: including, but not limited to, the implied warranties of merchantability and/or fitness for a particular purpose.
3: This sample code assumes that you are familiar with the programming language being demonstrated and the tools used
4: to create and debug procedures.*/
5:
6: namespace MyOLAddin
7: {
8: using System.Windows.Forms;
9: using System;
10: using Microsoft.Office.Core;
11: using Extensibility;
12: using System.Runtime.InteropServices;
13: using Outlook= Microsoft.Office.Interop.Outlook ;
14: using Microsoft.Vbe.Interop.Forms;
15:
16: /// <summary>
17: /// The object for implementing an Add-in.
18: /// </summary>
19: /// <seealso class='IDTExtensibility2' />
20: [GuidAttribute("406F2E78-C45C-4C12-AEB6-244837293650"), ProgId("MyOLAddin.Connect")]
21: public class Connect : Object, Extensibility.IDTExtensibility2
22: {
23: /// <summary>
24: /// Implements the constructor for the Add-in object.
25: /// Place your initialization code within this method.
26: /// </summary>
27: ///
28:
29: Outlook.Application m_outlook;
30: Outlook.Inspectors m_inspectors;
31: public Connect()
32: {
33:
34: }
35:
36: /// <summary>
37: /// Implements the OnConnection method of the IDTExtensibility2 interface.
38: /// Receives notification that the Add-in is being loaded.
39: /// </summary>
40: /// <param term='application'>
41: /// Root object of the host application.
42: /// </param>
43: /// <param term='connectMode'>
44: /// Describes how the Add-in is being loaded.
45: /// </param>
46: /// <param term='addInInst'>
47: /// Object representing this Add-in.
48: /// </param>
49: /// <seealso class='IDTExtensibility2' />
50: public void OnConnection(object application, Extensibility.ext_ConnectMode connectMode, object addInInst, ref System.Array custom)
51: {
52: m_outlook = application as Outlook.Application;
53: m_inspectors = m_outlook.Inspectors;
54: m_inspectors.NewInspector +=new Microsoft.Office.Interop.Outlook.InspectorsEvents_NewInspectorEventHandler(myInspColl_NewInspector);
55: }
56:
57: /// <summary>
58: /// Implements the OnDisconnection method of the IDTExtensibility2 interface.
59: /// Receives notification that the Add-in is being unloaded.
60: /// </summary>
61: /// <param term='disconnectMode'>
62: /// Describes how the Add-in is being unloaded.
63: /// </param>
64: /// <param term='custom'>
65: /// Array of parameters that are host application specific.
66: /// </param>
67: /// <seealso class='IDTExtensibility2' />
68: public void OnDisconnection(Extensibility.ext_DisconnectMode disconnectMode, ref System.Array custom)
69: {
70: }
71:
72: /// <summary>
73: /// Implements the OnAddInsUpdate method of the IDTExtensibility2 interface.
74: /// Receives notification that the collection of Add-ins has changed.
75: /// </summary>
76: /// <param term='custom'>
77: /// Array of parameters that are host application specific.
78: /// </param>
79: /// <seealso class='IDTExtensibility2' />
80: public void OnAddInsUpdate(ref System.Array custom)
81: {
82: }
83:
84: /// <summary>
85: /// Implements the OnStartupComplete method of the IDTExtensibility2 interface.
86: /// Receives notification that the host application has completed loading.
87: /// </summary>
88: /// <param term='custom'>
89: /// Array of parameters that are host application specific.
90: /// </param>
91: /// <seealso class='IDTExtensibility2' />
92: public void OnStartupComplete(ref System.Array custom)
93: {
94: }
95:
96: /// <summary>
97: /// Implements the OnBeginShutdown method of the IDTExtensibility2 interface.
98: /// Receives notification that the host application is being unloaded.
99: /// </summary>
100: /// <param term='custom'>
101: /// Array of parameters that are host application specific.
102: /// </param>
103: /// <seealso class='IDTExtensibility2' />
104: public void OnBeginShutdown(ref System.Array custom)
105: {
106:
107: }
108:
109: private void myInspColl_NewInspector(Outlook.Inspector inspector)
110: {
111: Microsoft.Vbe.Interop.Forms.ControlClass mc;
112: Microsoft.Vbe.Interop.Forms.CommandButton cb;
113: // Here we wire up the click event of the CommandButton1 on the "P.2" of the Outlook Custom Form
114: try
115: {
116: Microsoft.Vbe.Interop.Forms.UserForm userform;
117:
118: object obTemp = ((Outlook.Pages) (Inspector.ModifiedFormPages))["P.2"];
119:
120: userform = (Microsoft.Vbe.Interop.Forms.UserForm) obTemp;
121:
122: mc = (ControlClass) userform.Controls._GetItemByName("CommandButton1");
123:
124: cb = (CommandButton) mc;
125:
126: cb.Click+=new CommandButtonEvents_ClickEventHandler(cb_Click);
127:
128: }
129: catch (Exception)
130: {
131: //MessageBox.Show(e.ToString());
132: mc = null;
133: }
134: }
135:
136: //This is event handler of the CommandButton1 Click's event
137: private void cb_Click()
138: {
139: MessageBox.Show("cb");
140: }
141: }
142: }
We can refer to the following KB as in case of some issue related to using Microsoft.Vbe.Introp.Forms :
BUG: "Attempt to Access the Method Failed" Error Message When You Use a Reference to the Wrong Microsoft Forms 2.0 Object Library
https://support.microsoft.com/kb/824009