2010-02-21 9 views
4

J'utilise un WinViews ListView pour afficher certains fichiers, mais à part afficher les fichiers comme l'explorateur, je veux avoir le même menu contextuel de l'explorateur quand vous obtenez un clic droit sur un élément à l'intérieur.Comment obtenir le menu contextuel de l'explorateur dans Winforms ListView?

Est-ce possible? Comment l'activer pour mon application ListView?

+0

voulez-vous le ** menu explorateur ou un menu contextuel * explorateur *. Et quel code avez-vous dans votre listview maintenant? Je viens de faire des choses contextuelles dans une liste. – IAbstract

+0

Merci, je veux dire le menu contextuel de l'explorateur qui s'affiche en fonction de tous les fichiers que vous faites un clic droit. À l'heure actuelle, le code que j'ai affiché remplit la liste avec des éléments, mais pas encore les menus contextuels. –

+1

Pensez également à utiliser les commandes shell Shell MegaPack - http://www.ssware.com/megapack.htm - ce sont des commandes comme Explorer avec des menus contextuels, glisser-déposer, renommer, vignettes, vue détaillée, etc, comme l'Explorateur Windows . – logicnp

Répondre

2

La seule façon dont je sais de faire ceci est d'utiliser pinvoke et COM pour le faire. L'API non managée que vous voulez, je pense, est SHCreateDefaultContextMenu(). Une fois que vous avez terminé l'interop (vérifiez d'abord pinvoke.net), vous pouvez faire l'interop pour toutes les autres choses requises par DEFCONTEXTMENU. Ce ne sera pas facile. Bienvenue au pays des PIDL.

+1

Merci espoir que je peux trouver mon chemin à partir de cela. –

+0

J'ai regardé pinvoke mais ceux-ci ne semblent pas être là. Je ne peux pas être la première personne à vouloir ce comportement, non? –

+0

Vous pouvez être la première personne qui se soucie de le partager avec les autres. Il y a beaucoup de choses évidentes manquantes à partir de là. –

2

je fait de la difficulté à obtenir un menu contextuel personnalisé pour montrer avec un clic droit: Erratic Behavior from ContextMenu

je encore mis en œuvre un peu différente:

private void lstModules_MouseDown(object sender , MouseEventArgs e) 
    { 
     hitTest = lstModules.HitTest(e.Location); 

     switch (e.Button) 
     { 
      case MouseButtons.Right: 
       if (hitTest != null && hitTest.Item != null) 
       { 
        // right clicking an item in the listview 
        selectedModule = hitTest.Item.Name; 

        lstModules.ContextMenuStrip = mnuContext_OptionsA; 
       } 
       else 
       { 
        // right clicking in white area of listview 
        lstModules.ContextMenuStrip = mnuContext_OptionsB; 
       } 
       break; 
     } 
    } 
Questions connexes