Ajouter un gestionnaire pour MouseUp. Dans le gestionnaire, vérifiez les arguments pour un bouton droit de la souris, retour si ce n'est pas le cas. Appelez treeView.GetNodeAt() avec les coordonnées de la souris pour trouver le nœud. Créez un menu contextuel.
est ici quelque chose de similaire pour un contrôle de liste qui peut être adapté pour une TreeView:
private void listJobs_MouseUp(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Right)
{
int index = listJobs.IndexFromPoint(e.Location);
if (index != ListBox.NoMatches)
{
listJobs.SelectedIndex = index;
Job job = (Job)listJobs.Items[index];
ContextMenu cm = new ContextMenu();
AddMenuItem(cm, "Run", QueueForRun, job).Enabled = !job.Pending;
AddMenuItem(cm, "Cancel run", CancelQueueForRun, job).Enabled = (job.State == JobState.Pending || job.State == JobState.Running);
AddMenuItem(cm, "Open folder", OpenFolder, job);
cm.Show(listJobs, e.Location);
}
}
}
private MenuItem AddMenuItem(ContextMenu cm, string text, EventHandler handler, object context)
{
MenuItem item = new MenuItem(text, handler);
item.Tag = context;
cm.MenuItems.Add(item);
return item;
}
Vous devrez peut-être utiliser PointToClient ou PointToScreen sur le formulaire de traduire les coordonnées de façon appropriée. Vous réaliserez rapidement si vous en avez besoin lorsque le menu contextuel apparaît au mauvais endroit.
Utilisez-vous Windows Forms ou WPF? –
Oui formes de fenêtres. Désolé oublié de mentionner cela. Et Visual Studio 2005. – zack