Je n'ai pas réussi à comprendre comment garder un menu contextuel ouvert après avoir géré un événement de clic après le premier niveau. Voici un exemple où j'ai un menu contextuel avec un menu de menus vérifiables. J'ouvre le menu contextuel après avoir manipulé l'événement de clic, mais je dois retourner manuellement au menu intérieur. Existe-t-il un moyen d'ouvrir le menu externe par programme ou d'empêcher le menu interne de se fermer?ContextMenu ne restera pas ouvert C# .Net 4.0 Profil du client WinForms
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace NoCloseContextMenu
{
public partial class Form1 : Form
{
bool[] store_checks = new bool[8];
public Form1()
{
InitializeComponent();
richTextBox1.AppendText("http://");
richTextBox1.LinkClicked += new LinkClickedEventHandler(richTextBox1_LinkClicked);
}
void richTextBox1_LinkClicked(object sender, LinkClickedEventArgs e)
{
MenuItemExtended[] inner_menuitems = new MenuItemExtended[8];
for (int i = 0; i < store_checks.Length; i++)
{
MenuItemExtended inner_menuitem = new MenuItemExtended("Check #" + i.ToString());
inner_menuitem.menuitem_index = i;
inner_menuitem.contextmenu_point = this.PointToClient(Cursor.Position);
inner_menuitem.Checked = store_checks[i];
inner_menuitem.Shortcut = (Shortcut)(131120 + i); //Ctrl+i = 131120+i
inner_menuitem.ShowShortcut = true;
inner_menuitem.Click += new EventHandler(inner_menuitem_Click);
inner_menuitems[i] = inner_menuitem;
}
MenuItem outer_menu = new MenuItem("Outer Menu", inner_menuitems);
ContextMenu context_menu = new ContextMenu(new MenuItem[] { outer_menu });
context_menu.Show(this, this.PointToClient(Cursor.Position));
}
void inner_menuitem_Click(object sender, EventArgs e)
{
MenuItemExtended sender_menu = (MenuItemExtended)sender;
store_checks[sender_menu.menuitem_index] = !store_checks[sender_menu.menuitem_index];
sender_menu.Checked = !sender_menu.Checked;
sender_menu.GetContextMenu().Show(this, sender_menu.contextmenu_point);
}
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
this.richTextBox1 = new System.Windows.Forms.RichTextBox();
this.SuspendLayout();
//
// richTextBox1
//
this.richTextBox1.Location = new System.Drawing.Point(13, 13);
this.richTextBox1.Name = "richTextBox1";
this.richTextBox1.Size = new System.Drawing.Size(100, 96);
this.richTextBox1.TabIndex = 0;
this.richTextBox1.Text = "";
//
// Form1
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(284, 262);
this.Controls.Add(this.richTextBox1);
this.Name = "Form1";
this.Text = "Form1";
this.ResumeLayout(false);
}
#endregion
private System.Windows.Forms.RichTextBox richTextBox1;
}
public class MenuItemExtended : MenuItem
{
public int menuitem_index;
public Point contextmenu_point;
public MenuItemExtended(string text)
{
this.Text = text;
}
}
}
Aussi, est-il possible d'obtenir les raccourcis « Ctrl + numéro » pour travailler et activer l'événement click? Merci d'avance pour l'aide!