How to: Maintain Position Information for Custom Toolbars between Outlook Sessions
This example demonstrates one possible way to save and restore the position of an Outlook custom toolbar. The code creates a toolbar and saves its position in a user settings file when the user exits Outlook. Restarting Outlook recreates the toolbar and sets its position based on the saved settings.
Applies to: The information in this topic applies to application-level projects for Outlook 2007. For more information, see Features Available by Office Application and Project Type.
Example
Dim commandBar As Office.CommandBar
Dim WithEvents button As Office.CommandBarButton
Const TOOLBARNAME As String = "ExampleBar"
Const REGROOT As String = "Software\YourCompany\YourApp"
Dim WithEvents explorerEvents As Outlook.ExplorerEvents_10_Event
Dim explorer As Outlook.Explorer
Private Sub ThisAddIn_Startup(ByVal sender As Object, _
ByVal e As System.EventArgs) Handles Me.Startup
explorer = Me.Application.ActiveExplorer()
If (explorer IsNot Nothing) Then
commandBar = Me.Application.ActiveExplorer.CommandBars.Add( _
TOOLBARNAME, _
Office.MsoBarPosition.msoBarFloating, _
False, _
True)
button = TryCast(commandBar.Controls.Add( _
Office.MsoControlType.msoControlButton, _
System.Type.Missing, System.Type.Missing, _
1, True), Office.CommandBarButton)
button.Style = _
Microsoft.Office.Core.MsoButtonStyle.msoButtonCaption
button.Caption = "Button 1"
button.Tag = "newButton"
LoadCommandBarSettings()
End If
End Sub
Private Sub SaveCommandBarSettings()
MySettings.Default("CommandBarTop") = commandBar.Top
MySettings.Default("CommandBarLeft") = commandBar.Left
MySettings.Default("CommandBarVisible") = commandBar.Visible
MySettings.Default("CommandBarPosition") = CInt(commandBar.Position)
MySettings.Default("CommandBarRowIndex") = commandBar.RowIndex
MySettings.Default.Save()
End Sub
Private Sub LoadCommandBarSettings()
Dim position As Microsoft.Office.Core.MsoBarPosition = _
CType(MySettings.Default("CommandBarPosition"), _
Microsoft.Office.Core.MsoBarPosition)
Dim rowIndex As Integer = _
CInt(MySettings.Default("CommandBarRowIndex"))
commandBar.RowIndex = rowIndex
Dim top As Integer = _
CInt(MySettings.Default("CommandBarTop"))
commandBar.Top = _
CInt(IIf(top <> 0, top, _
System.Windows.Forms.Screen.PrimaryScreen.Bounds.Height / 2))
Dim left As Integer = _
CInt(MySettings.Default("CommandBarLeft"))
commandBar.Left = _
CInt(IIf(left <> 0, left, _
System.Windows.Forms.Screen.PrimaryScreen.Bounds.Width / 2))
Dim visible As Boolean = _
CBool(MySettings.Default("CommandBarVisible"))
commandBar.Visible = visible
End Sub
Private Sub Click(ByVal ctrl As _
Microsoft.Office.Core.CommandBarButton, _
ByRef cancelDefault As Boolean) Handles Button.Click
System.Windows.Forms.MessageBox.Show("Hello World!")
End Sub
Sub ThisAddIn_Close() Handles explorerEvents.Close
SaveCommandBarSettings()
End Sub
Office.CommandBar commandBar;
Office.CommandBarButton button;
private const string TOOLBARNAME = "ExampleBar";
private Outlook.Explorer explorer;
private void ThisAddIn_Startup(object sender, System.EventArgs e)
{
explorer = this.Application.ActiveExplorer();
if (explorer != null)
{
((Outlook.ExplorerEvents_10_Event)explorer).Close +=
new Microsoft.Office.Interop.Outlook.ExplorerEvents_10_CloseEventHandler(ThisAddIn_Close);
commandBar = this.Application.ActiveExplorer().CommandBars.Add(TOOLBARNAME,
Office.MsoBarPosition.msoBarFloating, false, true);
button = commandBar.Controls.Add(
Office.MsoControlType.msoControlButton,
System.Type.Missing, System.Type.Missing,
1, true) as Office.CommandBarButton;
button.Style =
Microsoft.Office.Core.MsoButtonStyle.msoButtonCaption;
button.Caption = "Button 1";
button.Tag = "newButton";
button.Click += new Microsoft.Office.Core.
_CommandBarButtonEvents_ClickEventHandler(button_Click);
LoadCommandBarSettings();
}
}
private void LoadCommandBarSettings()
{
Microsoft.Office.Core.MsoBarPosition position =
(Microsoft.Office.Core.MsoBarPosition)Properties.Settings
.Default["CommandBarPosition"];
commandBar.Position = position;
int rowIndex =
Convert.ToInt32(
Properties.Settings.Default["CommandBarRowIndex"]);
commandBar.RowIndex = rowIndex;
int top =
Convert.ToInt32(
Properties.Settings.Default["CommandBarTop"]);
commandBar.Top =
top != 0 ? top : System.Windows.Forms.Screen.PrimaryScreen.
Bounds.Height / 2;
int left =
Convert.ToInt32(
Properties.Settings.Default["CommandBarLeft"]);
commandBar.Left =
left != 0 ? left : System.Windows.Forms.Screen.PrimaryScreen.
Bounds.Width / 2;
bool visible = Convert.ToBoolean(
Properties.Settings.Default["CommandBarVisible"]);
commandBar.Visible = visible;
}
private void SaveCommandBarSettings()
{
Properties.Settings.Default["CommandBarTop"] = commandBar.Top;
Properties.Settings.Default["CommandBarLeft"] = commandBar.Left;
Properties.Settings.Default["CommandBarVisible"] =
commandBar.Visible;
Properties.Settings.Default["CommandBarPosition"] =
(int)commandBar.Position;
Properties.Settings.Default["CommandBarRowIndex"] =
commandBar.RowIndex;
Properties.Settings.Default.Save();
}
void button_Click(Microsoft.Office.Core.CommandBarButton Ctrl,
ref bool CancelDefault)
{
System.Windows.Forms.MessageBox.Show("Hello world!");
}
void ThisAddIn_Close()
{
SaveCommandBarSettings();
}
Compiling the Code
This example requires:
Five user settings. Double-click the Settings.settings icon in the project’s Properties (in C#) or My Project (in Visual Basic) folder and add the following user-scoped properties:
CommandBarTop, type int, default value = 0
CommandBarLeft, type int, default value = 0
CommandBarVisible, type boolean, default value = true
CommandBarPosition, type int, default value = 4
CommandBarRowIndex, type int, default value = 1
See Also
Tasks
How to: Create Office Toolbars
How to: Add Commands to Shortcut Menus in Excel