Freigeben über


Gewusst wie: Hinzufügen benutzerdefinierter Symbole zu Symbolleisten- und Menüelementen

In diesem Beispiel wird einer Befehlsleistenschaltfläche in einem benutzerdefinierten Menü in Microsoft Office Outlook ein Symbol hinzugefügt. Das Symbol ist in den Projektressourcen enthalten. Weitere Informationen über Projektressourcen finden Sie unter Adding and Editing Resources (Visual C#) und Gewusst wie: Hinzufügen oder Entfernen von Ressourcen.

Betrifft: Die Informationen in diesem Thema betreffen Projekte auf Anwendungsebene für die folgenden Anwendungen: InfoPath 2007, Outlook 2007, Project 2007 und Visio 2007. Weitere Informationen finden Sie unter Verfügbare Funktionen nach Office-Anwendung und Projekttyp.

Obwohl dieses Beispiel speziell für Outlook gilt, kann der Teil des Codes, mit dem einer Befehlsleistenschaltfläche ein Symbol hinzugefügt wird, in jeder der oben aufgeführten Anwendungen verwendet werden, um einer Befehlsleistenschaltfläche Symbole hinzuzufügen.

So fügen Sie benutzerdefinierte Symbole hinzu

  1. Fügen Sie der Datei ThisAddIn.vb bzw. ThisAddIn.cs des Outlook-Projekts Code hinzu, um ein CommandBarPopup-Steuerelement und ein CommandBarButton-Steuerelement zu erstellen, die das benutzerdefinierte Menü und den Menübefehl darstellen. Dieser Code überprüft, ob das Menü vorhanden ist. Falls es vorhanden ist, wird es durch diesen Code entfernt. Dann wird das neue Menü hinzugefügt.

    Private MenuBar As Office.CommandBar
    Private newMenuBar As Office.CommandBarPopup
    Private ButtonOne As Office.CommandBarButton
    Private menuTag As String = "AUniqueName"
    
    
    Private Sub ThisAddIn_Startup(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Startup
        RemoveMenubar()
        AddMenuBar()
    End Sub
    
    Private Sub AddMenuBar()
        Try
            MenuBar = Me.Application.ActiveExplorer().CommandBars.ActiveMenuBar
            newMenuBar = MenuBar.Controls.Add( _
                Office.MsoControlType.msoControlPopup, _
                Temporary:=False)
            If newMenuBar IsNot Nothing Then
                newMenuBar.Caption = "See New Icon"
                newMenuBar.Tag = menuTag
                ButtonOne = newMenuBar.Controls.Add( _
                    Office.MsoControlType.msoControlButton, _
                    Before:=1, Temporary:=False)
                With ButtonOne
                    .Style = Office.MsoButtonStyle _
                    .msoButtonIconAndCaption
                    .Caption = "New Icon"
                    .FaceId = 65
                    .Tag = "c123"
                    .Picture = getImage()
                End With
                newMenuBar.Visible = True
            End If
        Catch Ex As Exception
            MsgBox(Ex.Message)
        End Try
    End Sub
    
    Private Sub RemoveMenubar()
        Try
            ' If the menu already exists, remove it.
            Dim foundMenu As Office.CommandBarPopup = _
                Me.Application.ActiveExplorer().CommandBars.ActiveMenuBar. _
                FindControl(Office.MsoControlType.msoControlPopup, _
                System.Type.Missing, menuTag, True, True)
            If foundMenu IsNot Nothing Then
                foundMenu.Delete(True)
            End If
        Catch Ex As Exception
            MsgBox(Ex.Message)
        End Try
    End Sub
    
    
    private Office.CommandBar menuBar;
    private Office.CommandBarPopup newMenuBar;
    private Office.CommandBarButton buttonOne;
    private string menuTag = "AUniqueTag";
    
    private void ThisAddIn_Startup(object sender, System.EventArgs e)
    {
        RemoveMenubar();
        AddMenuBar();
    }
    
    private void AddMenuBar()
    {
        try
        {
            menuBar = this.Application.ActiveExplorer().CommandBars.ActiveMenuBar;
            newMenuBar = (Office.CommandBarPopup)menuBar.Controls.Add(
                Office.MsoControlType.msoControlPopup, missing,
                missing, missing, false);
            if (newMenuBar != null)
            {
                newMenuBar.Caption = "See New Icon";
                newMenuBar.Tag = menuTag;
                buttonOne = (Office.CommandBarButton)
                    newMenuBar.Controls.
                Add(Office.MsoControlType.msoControlButton, System.
                    Type.Missing, System.Type.Missing, 1, true);
                buttonOne.Style = Office.MsoButtonStyle.
                    msoButtonIconAndCaption;
                buttonOne.Caption = "New Icon";
                buttonOne.FaceId = 65;
                buttonOne.Tag = "c123";
                buttonOne.Picture = getImage();
                newMenuBar.Visible = true;
            }
        }
        catch (Exception ex)
        {
            System.Windows.Forms.MessageBox.Show(ex.Message);
        }
    }
    
    private void RemoveMenubar()
    {
        // If the menu already exists, remove it.
        try
        {
            Office.CommandBarPopup foundMenu = (Office.CommandBarPopup)
                this.Application.ActiveExplorer().CommandBars.ActiveMenuBar.
                FindControl(Office.MsoControlType.msoControlPopup,
                System.Type.Missing, menuTag, true, true);
            if (foundMenu != null)
            {
                foundMenu.Delete(true);
            }
        }
        catch (Exception ex)
        {
            System.Windows.Forms.MessageBox.Show(ex.Message);
        }
    }
    
  2. Erstellen Sie eine neue Klasse mit dem Namen ConvertImage. Diese Klasse verwendet System.Forms.Axhost zum Konvertieren einer Image-Datei in einen Bildtyp, der auf das Menüelement angewendet werden kann.

    <Global.System.Security.Permissions.PermissionSetAttribute _
     (Global.System.Security.Permissions.SecurityAction.Demand, Name:="FullTrust")> _
    Public Class ConvertImage
        Inherits System.Windows.Forms.AxHost
        Public Sub New()
            MyBase.New("59EE46BA-677D-4d20-BF10-8D8067CB8B32")
        End Sub
    
        Public Shared Function Convert(ByVal Image _
            As System.Drawing.Image) As stdole.IPictureDisp
            Convert = GetIPictureFromPicture(Image)
        End Function
    End Class
    
    sealed public class ConvertImage : System.Windows.Forms.AxHost
    {
        private ConvertImage()
            : base(null)
        {
        }
    
        public static stdole.IPictureDisp Convert
            (System.Drawing.Image image)
        {
            return (stdole.IPictureDisp)System.
                Windows.Forms.AxHost
                .GetIPictureDispFromPicture(image);
        }
    }
    
  3. Fügen Sie eine Methode zum Konvertieren der Symboldatei in eine Image-Datei hinzu, indem Sie sie einer ImageList hinzufügen. Dieser Code sendet die Image-Datei an die von Ihnen erstellte ConvertImage.Convert-Methode und gibt sie anschließend an den Aufrufer zurück.

    Private Function getImage() As stdole.IPictureDisp
        Dim tempImage As stdole.IPictureDisp = Nothing
        Try
            Dim newIcon As System.Drawing.Icon = My.Resources.Icon1
            Dim newImageList As New System.Windows.Forms.ImageList
            newImageList.Images.Add(newIcon)
            tempImage = ConvertImage.Convert(newImageList.Images(0))
        Catch ex As Exception
            MsgBox(ex.Message)
        End Try
        Return tempImage
    End Function
    
    private stdole.IPictureDisp getImage()
    {
        stdole.IPictureDisp tempImage = null;
        try
        {
            System.Drawing.Icon newIcon =
                Properties.Resources.Icon1;
    
            System.Windows.Forms.ImageList newImageList = 
                new System.Windows.Forms.ImageList();
            newImageList.Images.Add(newIcon);
            tempImage = ConvertImage.Convert(newImageList.Images[0]);
        }
        catch (Exception ex)
        {
            System.Windows.Forms.MessageBox.Show(ex.Message);
        }
        return tempImage;
    }
    

Kompilieren des Codes

Für dieses Beispiel ist Folgendes erforderlich:

  • Ein Symbol in den Projektressourcen mit dem Namen Icon1.

Siehe auch

Aufgaben

Gewusst wie: Erstellen von Office-Symbolleisten

Gewusst wie: Hinzufügen von benutzerdefinierten Menüs und Menüelementen zu Outlook

Gewusst wie: Hinzufügen oder Entfernen von Ressourcen

Gewusst wie: Angeben eines Anwendungssymbols (Visual Basic, C#))

Weitere Ressourcen

Übersicht über das Outlook-Objektmodell

Verwalten von Anwendungsressourcen