ToolStripMenuItem qui m'énerve..

Signaler
Messages postés
3246
Date d'inscription
lundi 25 avril 2005
Statut
Modérateur
Dernière intervention
27 octobre 2012
-
Messages postés
3246
Date d'inscription
lundi 25 avril 2005
Statut
Modérateur
Dernière intervention
27 octobre 2012
-
 

Salut pour faire joli j'utilise un MenuStrip mais la propriété ImageKey ne marche pas sur les ToolStripMenuItems imbriqués. Je fais une erreur où c'est normal !?


private void InitializeForm( )
{
    this.SuspendLayout( );


    // ImageList


    imageList = new ImageList( );
    imageList.ImageSize = new Size( 32, 32 );
    imageList.ColorDepth = ColorDepth.Depth24Bit;
    imageList.TransparentColor = Color.Magenta;
    imageList.Images.Add( "Network", new Bitmap( "Network.bmp" ) );
    imageList.Images.Add( "Scan", new Bitmap( "Scan.bmp" ) );


    // ToolStripMenuItem


    ToolStripMenuItem scanItem = new ToolStripMenuItem( );
    scanItem.Text = "&Scan Network";
    scanItem.ImageKey = "Scan"; // <-- L'image ne s'affiche pas :(
    //scanItem.Image = imageList.Images[ "Scan" ]; // <-- L'image s'affiche.
    scanItem.ShortcutKeys = Keys.Control | Keys.F5;
    scanItem.Click += delegate { MessageBox.Show( "Scanning.. "); };


    ToolStripMenuItem exitItem = new ToolStripMenuItem( );
    exitItem.Text = "E&xit";
    exitItem.ShortcutKeys = Keys.Alt | Keys.F4;
    exitItem.Click += delegate { this.Close( ); };


    ToolStripMenuItem networkItem = new ToolStripMenuItem( );
    networkItem.Text = "&Network";
    networkItem.ImageKey = "Network"; // <-- L'image s'affiche.
    networkItem.DropDownItems.AddRange
    (
        new ToolStripItem[ ]
        {
            scanItem,
            new ToolStripSeparator( ),
            exitItem
        }
    );


    // MenuStrip
   
    MenuStrip menuStrip = new MenuStrip( );
    menuStrip.ImageList = imageList;
    menuStrip.Items.Add( networkItem );


    // MainForm


    this.MainMenuStrip = menuStrip;
    this.Controls.Add( menuStrip );


    this.ResumeLayout( );
}

8 réponses

Messages postés
5487
Date d'inscription
dimanche 4 août 2002
Statut
Modérateur
Dernière intervention
20 juin 2013
49
Salut,
Tiens bizarre, j'ai essayé ça ne marche pas non plus chez moi.
Et ImageIndex ne semble pas fonctionner non plus d'ailleurs.

T'as rien trouvé dans MSDN à ce sujet ?

<hr size="2" />VC# forever
Messages postés
3246
Date d'inscription
lundi 25 avril 2005
Statut
Modérateur
Dernière intervention
27 octobre 2012
33
Je suis sur un piste, en rajoutant scanItem.Owner.ImageList = imageList ça passe mais j'ai pas encore bien compris qui c'est cet 'Owner'
Messages postés
58
Date d'inscription
mercredi 28 septembre 2005
Statut
Membre
Dernière intervention
15 novembre 2006

Salut, moi je ne mais que la propriété Image = monImage, et ca suffit pour l'afficher.
Messages postés
3246
Date d'inscription
lundi 25 avril 2005
Statut
Modérateur
Dernière intervention
27 octobre 2012
33
atmeitsatme, oui bien sûr c'est ce que j'ai fais plus haut mais j'ai commenté la ligne car ce que je veux c'est utiliser mon ImageList.

...


En fait le 'Owner' est de type ToolStripDropDownMenu apparemment si j'ai bien compris il est généré implicitement par la méthode CreateDefaultDropDown au moment de l'insertion des items dans la propriété DropDownItems. Si on le créer explicitement ont peut lui assigner l'ImageList et ça marche. Ca fait quand même pas mal de code et en mémoire ça doit être assez lourd tous ces ToolStripMachin..


private void InitializeForm( )
{
    this.SuspendLayout( );


    // ImageList


    imageList = new ImageList( );
    imageList.ImageSize = new Size( 32, 32 );
    imageList.ColorDepth = ColorDepth.Depth24Bit;
    imageList.TransparentColor = Color.Magenta;
    imageList.Images.Add( "Scan", new Bitmap( "Scan.bmp" ) );


    ToolStripMenuItem scanItem = new ToolStripMenuItem( );
    scanItem.Text = "&Scan Network";
    scanItem.ImageKey = "Scan";
    scanItem.ShortcutKeys = Keys.Control | Keys.F5;
    scanItem.Click += delegate { MessageBox.Show( "Scanning.. "); };


    ToolStripMenuItem exitItem = new ToolStripMenuItem( );
    exitItem.Text = "E&xit";
    exitItem.ShortcutKeys = Keys.Alt | Keys.F4;
    exitItem.Click += delegate { this.Close( ); };


    ToolStripDropDownMenu dropDown = new ToolStripDropDownMenu( );
    dropDown.ImageList = imageList;
    dropDown.Items.AddRange
    (
        new ToolStripItem[ ]
        {
            scanItem,
            new ToolStripSeparator( ),
            exitItem
        }
    );


    ToolStripMenuItem networkItem = new ToolStripMenuItem( );
    networkItem.Text = "&Network";
    networkItem.DropDown = dropDown;
    
    MenuStrip menuStrip = new MenuStrip( );
    menuStrip.ImageList = imageList;
    menuStrip.Items.Add( networkItem );


    this.MainMenuStrip = menuStrip;
    this.Controls.Add( menuStrip );


    this.ResumeLayout( );
}
Messages postés
3246
Date d'inscription
lundi 25 avril 2005
Statut
Modérateur
Dernière intervention
27 octobre 2012
33
Encore un autre problème, j'aimerais utiliser le même ToolStripMenuItem à la fois pour le MenuStrip et pour le ContextMenuStrip mais si j'assigne le ToolStripMenuItem au ContextMenuStrip il disparait du MenuStrip !??


Est ce qu'il y a un moyen d'utilise le même ToolStripMenuItem ( sans en faire une copie ) ?




private void InitializeForm( )
{
    this.SuspendLayout( );


    ToolStripMenuItem scanItem = new ToolStripMenuItem( );
    scanItem.Text = "&Scan Network";
    scanItem.Image = Resource.Scan;
    scanItem.ShortcutKeys = Keys.Control | Keys.F5;
    scanItem.Click += delegate { MessageBox.Show( "Scanning.." ); };


    ToolStripMenuItem exitItem = new ToolStripMenuItem( );
    exitItem.Text = "E&xit";
    exitItem.ShortcutKeys = Keys.Alt | Keys.F4;
    exitItem.Click += delegate { this.Close( ); };


    ToolStripMenuItem networkItem = new ToolStripMenuItem( );
    networkItem.Text = "&Network";
    networkItem.DropDownItems.AddRange
    (
        new ToolStripItem[ ]
        {
            scanItem,
            new ToolStripSeparator( ),
            exitItem
        }
    );
  
    MenuStrip menuStrip = new MenuStrip( );
    menuStrip.Items.Add( networkItem );


    ContextMenuStrip contextMenu = new ContextMenuStrip( );
    //contextMenu.Items.Add( scanItem ); // <-- le scanItem ne s'affiche plus dans le MenuStrip.


    this.MainMenuStrip = menuStrip;
    this.ContextMenuStrip = contextMenu;
    this.Controls.Add( menuStrip );


    this.ResumeLayout( );
}
Messages postés
6352
Date d'inscription
samedi 1 juin 2002
Statut
Modérateur
Dernière intervention
2 août 2014
82
Salut,

Non, aucun espoir de ce côté là, l'implémentation de Add se charge de changer le propriétaire de l'item. :-)

/*
coq
MVP Visual C#
CoqBlog
*/
Messages postés
3246
Date d'inscription
lundi 25 avril 2005
Statut
Modérateur
Dernière intervention
27 octobre 2012
33
Ah mince alors.. et moi qui voulait faire une application "légère".

Merci.
Messages postés
3246
Date d'inscription
lundi 25 avril 2005
Statut
Modérateur
Dernière intervention
27 octobre 2012
33
Je vais peut être créer mes menus dynamiquement comme avec l'évènement Popup des anciens MenuItems.