[WinForm] ComboBox bugguée ?!

ComboBox bugguée ?! [WinForm] - C#/.NET managed - Programmation

Marsh Posté le 08-12-2005 à 18:06:46    

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 :
  1. public Form()
  2. {
  3. InitializeComponent();
  4. // création du menu
  5. ContextMenu menu = new ContextMenu();
  6. menu.MenuItems.Add(new MyMenuItem("un" ));
  7. menu.MenuItems.Add(new MyMenuItem("deux" ));
  8. menu.MenuItems.Add(new MyMenuItem("trois" ));
  9. // association du menu avec les contrôles
  10. this.listView1.ContextMenu = menu;
  11. this.listBox1.ContextMenu = menu;
  12. this.comboBox1.ContextMenu = menu;
  13. }
  14. // mes MenuItems perso
  15. public class MyMenuItem : MenuItem
  16. {
  17. public MyMenuItem(string caption) : base(caption)
  18. {
  19.  // pour forcer le dessin à la main
  20.  this.OwnerDraw = true;
  21. }
  22. protected override void OnMeasureItem(MeasureItemEventArgs e)
  23. {
  24.  base.OnMeasureItem (e);
  25.  // indique la taille de l'item dans le menu
  26.  e.ItemWidth = 60;
  27.  e.ItemHeight = 20;
  28. }
  29. protected override void OnDrawItem(DrawItemEventArgs e)
  30. {
  31.  base.OnDrawItem (e);
  32.  // dessin du texte et autre fioritures
  33.  e.DrawBackground();
  34.  e.DrawFocusRectangle();
  35.  using(Brush brush = new System.Drawing.SolidBrush(System.Drawing.Color.Black))
  36.   e.Graphics.DrawString(this.Text, ((ContextMenu)this.Parent).SourceControl.Font, brush, e.Bounds);
  37. }
  38. }



---------------
Tout est normal, suffit de comprendre pourquoi.
Reply

Marsh Posté le 08-12-2005 à 18:06:46   

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed