View Single Post
  #5  
Old February 25th 08, 01:55 PM posted to microsoft.public.outlook.program_addins
Ken Slovak - [MVP - Outlook]
external usenet poster
 
Posts: 5,848
Default Outlook Addin functions only one time after Outlook is started

Your button object is going out of scope and is being garbage collected,
therefore it won't fire again on a click.

That's a very common problem in managed code if you don't declare your
objects at the correct scope level.

Declare your button object at the class level and not within Startup(). Then
in Startup() you instantiate the object, it will remain alive until you
release it explicitly.

--
Ken Slovak
[MVP - Outlook]
http://www.slovaktech.com
Author: Professional Programming Outlook 2007
Reminder Manager, Extended Reminders, Attachment Options
http://www.slovaktech.com/products.htm


"Mo" wrote in message
...
Hi,

I wrote a simple add-in to copy the content of a selected email to
database. it works fine if you startup the outlook, select an email
and press the addin button. but any click after that does not do
anything. Any ideas on what I am doing wrong?

Here is my code

using System;
using System.Windows.Forms;
using Microsoft.VisualStudio.Tools.Applications.Runtime;
using Outlook = Microsoft.Office.Interop.Outlook;
using Office = Microsoft.Office.Core;

namespace CreateOutlookTicket
{
public partial class ThisAddIn
{
myTableAdapters.TicketsTableAdapter Tickets = new
CreateOutlookTicket.myTableAdapters.TicketsTableAd apter();
private void ThisAddIn_Startup(object sender, System.EventArgs
e)
{
string COMMANDBAR_NAME = "addin";
Office.CommandBar myBar;
Office.CommandBarButton myButton;
myBar =
this.Application.ActiveExplorer().CommandBars.Add( COMMANDBAR_NAME,
Office.MsoBarPosition.msoBarTop, false, true);
myBar.Visible = true;

string BUTTON_NAME = "Create Ticket";
myButton =
(Office.CommandBarButton)myBar.Controls.Add(Office .MsoControlType.msoControlButton,
Type.Missing, Type.Missing, Type.Missing, true);
myButton.Caption = BUTTON_NAME;
myButton.Style =
Office.MsoButtonStyle.msoButtonIconAndCaption;
myButton.Enabled = true;
myButton.Click += new
Microsoft.Office.Core._CommandBarButtonEvents_Clic kEventHandler(myButton_Click);



}

void myButton_Click(Microsoft.Office.Core.CommandBarBut ton
Ctrl, ref bool CancelDefault)
{
foreach (object item in
Application.ActiveExplorer().Selection)
{
Outlook.MailItem mi = item as Outlook.MailItem;
if (mi != null)
{
try
{

int
TicketID=Convert.ToInt32(Tickets.GetInsertID(mi.Se nderName,
mi.SenderEmailAddress, "myadin", mi.SentOn, "General",
mi.Subject, mi.Body, null, "Open", null,
null));

Outlook.MAPIFolder outBoxfolder =
this.Application.GetNamespace("MAPI").GetDefaultFo lder(Microsoft.Office.Interop.Outlook.OlDefaultFol ders.olFolderOutbox);
Outlook.MailItem mailitem =
(Outlook.MailItem)outBoxfolder.Items.Add(Outlook.O lItemType.olMailItem);
mailitem.Subject = "New Ticket
#"+TicketID.ToString()+" Has Been Created";
mailitem.Body = "A new ticket has been
created. Please visit ticketing system for details";
mailitem.To = "xxx.xx.xxx";
mailitem.Send();
System.Windows.Forms.MessageBox.Show("Ticket
"+TicketID.ToString()+" Created", "Ticket Manager");

}
catch (Exception ex)
{

System.Windows.Forms.MessageBox.Show(ex.Message, "Ticket Manager");
}

}
else
{
System.Windows.Forms.MessageBox.Show("Select an
Email", "Ticket Manager");
}


}
}

private void ThisAddIn_Shutdown(object sender,
System.EventArgs e)
{
}

#region VSTO generated code

/// summary
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// /summary
private void InternalStartup()
{
this.Startup += new
System.EventHandler(ThisAddIn_Startup);
this.Shutdown += new
System.EventHandler(ThisAddIn_Shutdown);
}

#endregion
}
}


Ads