Cómo: Mantener la información posicional de las barras de herramientas personalizadas entre varias sesiones de Outlook

Actualización: noviembre 2007

Se aplica a

La información de este tema sólo se aplica a los proyectos y versiones especificados de Visual Studio Tools para Office de Microsoft Office.

Tipo de proyecto

  • Proyectos de nivel de aplicación

Versión de Microsoft Office

  • Outlook 2003

  • Outlook 2007

Para obtener más información, vea Características disponibles por aplicación y tipo de proyecto.

En este ejemplo se muestra una manera de guardar y restaurar la posición de una barra de herramientas personalizada de Outlook. El código crea una barra de herramientas y guarda su posición en un archivo de configuración de usuario cuando el usuario sale de Outlook. Al reiniciar Outlook, se vuelve a crear la barra de herramientas y se establece su posición según la configuración guardada.

Ejemplo

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_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();

    ((Outlook.ExplorerEvents_Event)explorer).Close += 
        new Microsoft.Office.Interop.Outlook.ExplorerEvents_CloseEventHandler(ThisAddIn_Close);

    if (explorer != null)
    {
        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();
}

Compilar el código

Este ejemplo requiere:

  • Cinco configuraciones de usuario. Haga doble clic en el icono Settings.settings en Propiedades del proyecto (en C#) o en la carpeta Mi proyecto (en Visual Basic) y agregue las siguientes propiedades de ámbito de usuario:

    • CommandBarTop, tipo int, valor predeterminado = 0

    • CommandBarLeft, tipo int, valor predeterminado = 0

    • CommandBarVisible, tipo boolean, valor predeterminado = true

    • CommandBarPosition, tipo int, valor predeterminado = 4

    • CommandBarRowIndex, tipo int, valor predeterminado = 1

Vea también

Tareas

Cómo: Crear barras de herramientas de Office mediante programación

Cómo: Crear menús de Office mediante programación

Conceptos

Información general sobre el modelo de objetos de Outlook

Personalización de la interfaz de usuario de Office

Crear soluciones de Office en Visual Studio