J'utilise un ContextMenu, avec un contenu perso : il contient mes propres MenuItem.
Ce qui m'intéresse c'est de les redessiner moi-même, j'ai donc ajouté this.OwnerDraw = true; dans le constructeur de mes MenuItems.
Et là incroyable !! Ca marche très bien pour le ListView, pour le ListBox, mais pour le ComboBox, l'appel à OnDrawItem n'est jamais fait... Ca fait un beau menu vide. Qqn connait ce bug ? Et le moyen de le contourner ?
Code :
- public Form()
- {
- InitializeComponent();
- // création du menu
- ContextMenu menu = new ContextMenu();
- menu.MenuItems.Add(new MyMenuItem("un" ));
- menu.MenuItems.Add(new MyMenuItem("deux" ));
- menu.MenuItems.Add(new MyMenuItem("trois" ));
- // association du menu avec les contrôles
- this.listView1.ContextMenu = menu;
- this.listBox1.ContextMenu = menu;
- this.comboBox1.ContextMenu = menu;
- }
- // mes MenuItems perso
- public class MyMenuItem : MenuItem
- {
- public MyMenuItem(string caption) : base(caption)
- {
- // pour forcer le dessin à la main
- this.OwnerDraw = true;
- }
- protected override void OnMeasureItem(MeasureItemEventArgs e)
- {
- base.OnMeasureItem (e);
- // indique la taille de l'item dans le menu
- e.ItemWidth = 60;
- e.ItemHeight = 20;
- }
- protected override void OnDrawItem(DrawItemEventArgs e)
- {
- base.OnDrawItem (e);
- // dessin du texte et autre fioritures
- e.DrawBackground();
- e.DrawFocusRectangle();
- using(Brush brush = new System.Drawing.SolidBrush(System.Drawing.Color.Black))
- e.Graphics.DrawString(this.Text, ((ContextMenu)this.Parent).SourceControl.Font, brush, e.Bounds);
- }
- }
|
---------------
Tout est normal, suffit de comprendre pourquoi.