ToolStripMenuItem qui m'énerve..

Lutinore Messages postés 3246 Date d'inscription lundi 25 avril 2005 Statut Membre Dernière intervention 27 octobre 2012 - 28 juil. 2006 à 17:08
Lutinore Messages postés 3246 Date d'inscription lundi 25 avril 2005 Statut Membre Dernière intervention 27 octobre 2012 - 29 juil. 2006 à 15:02
 

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

cs_Bidou Messages postés 5487 Date d'inscription dimanche 4 août 2002 Statut Membre Dernière intervention 20 juin 2013 61
28 juil. 2006 à 19:35
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
0
Lutinore Messages postés 3246 Date d'inscription lundi 25 avril 2005 Statut Membre Dernière intervention 27 octobre 2012 41
28 juil. 2006 à 20:46
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'
0
atmeitsatme Messages postés 58 Date d'inscription mercredi 28 septembre 2005 Statut Membre Dernière intervention 15 novembre 2006
28 juil. 2006 à 21:35
Salut, moi je ne mais que la propriété Image = monImage, et ca suffit pour l'afficher.
0
Lutinore Messages postés 3246 Date d'inscription lundi 25 avril 2005 Statut Membre Dernière intervention 27 octobre 2012 41
28 juil. 2006 à 23:32
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( );
}
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Lutinore Messages postés 3246 Date d'inscription lundi 25 avril 2005 Statut Membre Dernière intervention 27 octobre 2012 41
29 juil. 2006 à 14:29
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( );
}
0
cs_coq Messages postés 6349 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 101
29 juil. 2006 à 14:38
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
*/
0
Lutinore Messages postés 3246 Date d'inscription lundi 25 avril 2005 Statut Membre Dernière intervention 27 octobre 2012 41
29 juil. 2006 à 14:51
Ah mince alors.. et moi qui voulait faire une application "légère".

Merci.
0
Lutinore Messages postés 3246 Date d'inscription lundi 25 avril 2005 Statut Membre Dernière intervention 27 octobre 2012 41
29 juil. 2006 à 15:02
Je vais peut être créer mes menus dynamiquement comme avec l'évènement Popup des anciens MenuItems.
0
Rejoignez-nous