2013-08-14 4 views
0

Je développe une application winforms en .net 2.0.Afficher un logo dans un contextemenustrip

Je me demande comment afficher un logo dans un contextemenustrip attaché à une icône de notification.

Ce n'est pas le type d'icône qui s'affiche à côté du texte. C'est le genre qui couvre toute la rangée et est généralement utilisé pour afficher le logo d'une entreprise. Excuses que je ne peux pas poster une image pour le moment.

EDIT:

ContextMenuStrip1.Items.Add(new ToolStripMenuItem(String, Image)) 

Mais, cela ne me donne une icône avec quelques textes à côté en une seule rangée et lorsque le curseur passe au-dessus, il sera mis en évidence. Ce que je veux accomplir est d'afficher une image sur la seule ligne sans n'importe quel texte et il ne peut pas être accentué quand le curseur survole ou cliquable.

Répondre

5

La solution est très simple. Vous devez utiliser un ToolStripRenderer personnalisé et remplacer le OnRenderImageMargin method. Vous devrez également préparer une image de logo avec une taille appropriée.

Voici le code:

public class Form1 : Form { 
    public Form1(){ 
     InitializeComponent(); 
     // This contextMenuStrip is used for your Notify Icon 
     // Just show it as you do 
     contextMenuStrip1.Renderer = new CustomRenderer(); 
    } 
} 
public class CustomRenderer : ToolStripProfessionalRenderer 
{    
    protected override void OnRenderImageMargin(ToolStripRenderEventArgs e) 
    { 
     e.Graphics.DrawImage(yourImage, e.AffectedBounds); 
    } 
} 

Note: Votre image doit déjà être tourné de 90 degrés. Sinon, vous devrez le faire pivoter en utilisant le code avant de dessiner.

Voici la capture d'écran du code ci-dessus, en utilisant le logo Stack Overflow:

enter image description here

Après votre édition, il ressemble à ce que vous voulez quelque chose de différent. Vous souhaiterez peut-être afficher le logo qui s'étend sur toute la région d'un élément. Je suppose que c'est le dernier élément. Vous devez ajouter un article avec Text = string.Empty. Voici le code:

public class Form1 : Form { 
    public Form1(){ 
     InitializeComponent(); 
     // This contextMenuStrip is used for your Notify Icon 
     // Just show it as you do 
     contextMenuStrip1.Renderer = new CustomRenderer(){RootToolStrip = contextMenuStrip1}; 
     //Add your last item first 
     int lastItemIndex = contextMenuStrip1.Items.Count - 1; 
     contextMenuStrip1.Items[lastItemIndex].AutoSize = false; 
     contextMenuStrip1.Items[lastItemIndex].Text = ""; 
     contextMenuStrip1.Items[lastItemIndex].Height = 40; 
    } 
} 
public class CustomRenderer : ToolStripProfessionalRenderer 
{  
    public ToolStrip RootToolStrip;   
    protected override void OnRenderMenuItemBackground(ToolStripItemRenderEventArgs e) 
    { 
     int i = e.ToolStrip.Items.Count - 1; 
     if (e.ToolStrip.Items.IndexOf(e.Item) == i&&e.ToolStrip == RootToolStrip) 
     { 
      e.Graphics.DrawImage(yourImage, new Rectangle(0,0,e.Item.Width, e.Item.Height)); 
     } else base.OnRenderMenuItemBackground(e); 
    } 
} 

Capture d'écran:

enter image description here