如何:维护 Outlook 会话之间自定义工具栏的位置信息
此示例演示一种保存和还原 Outlook 自定义工具栏位置的可能方式。 代码创建工具栏并在用户退出 Outlook 时在用户设置文件中保存其位置。 重新启动 Outlook 会重新创建工具栏并根据保存的设置来设置其位置。
**适用于:**本主题中的信息适用于 Outlook 2007 的应用程序级项目。有关更多信息,请参见按 Office 应用程序和项目类型提供的功能。
示例
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();
}
编译代码
此示例需要:
五个用户设置。 双击项目的**“属性”(在 C# 中)或“我的项目”**(在 Visual Basic 中)文件夹中的 Settings.settings 图标,并添加下列用户范围的属性:
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