Gewusst wie: Hinzufügen benutzerdefinierter Symbole zu Symbolleisten- und Menüelementen
Aktualisiert: November 2007
Betrifft |
---|
Die Informationen in diesem Thema gelten nur für die angegebenen Visual Studio Tools for Office-Projekte und Versionen von Microsoft Office. Projekttyp
Microsoft Office-Version
Weitere Informationen hierzu finden Sie unter Verfügbare Features nach Anwendung und Projekttyp. |
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 Hinzufügen und Bearbeiten von Ressourcen (Visual C#) und Gewusst wie: Hinzufügen oder Entfernen von Ressourcen.
So fügen Sie benutzerdefinierte Symbole hinzu
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 MessageBox.Show(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 MessageBox.Show(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) { 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) { MessageBox.Show(ex.Message); } }
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.
<Microsoft.VisualStudio.Tools.Applications.Runtime.StartupObjectAttribute(0), _ 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); } }
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 Icon = My.Resources.Icon1 Dim newImageList As New ImageList newImageList.Images.Add(newIcon) tempImage = ConvertImage.Convert(newImageList.Images(0)) Catch ex As Exception MessageBox.Show(ex.Message) End Try Return tempImage End Function
private stdole.IPictureDisp getImage() { stdole.IPictureDisp tempImage = null; try { System.Drawing.Icon newIcon = Properties.Resources.Icon1; ImageList newImageList = new ImageList(); newImageList.Images.Add(newIcon); tempImage = ConvertImage.Convert(newImageList.Images[0]); } catch (Exception ex) { 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: Hinzufügen von benutzerdefinierten Symbolleisten und Symbolleistenelementen zu Outlook
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#))
Konzepte
Übersicht über das Outlook-Objektmodell