2009-02-12 7 views
3

J'ai un ListView dans lequel je veux afficher un menu contextuel si un élément est cliqué avec le bouton droit, et un autre si le clic se produit dans le contrôle ListView. Le problème que j'obtiens est que l'événement MouseClick ne se déclenche que lorsqu'un élément est cliqué avec le bouton droit, et non le contrôle. Qu'est-ce qui cause cela et comment puis-je le contourner?ListView MouseClick Event

+0

pouvez-vous placer le code du contrôle asp.net et la sortie html dans la page? – balexandre

+0

WinForms ou WebForms? –

Répondre

2

Vous pouvez sous-classe ListView pour ajouter un événement clic droit:

using System; 
using System.Collections.Generic; 
using System.Text; 
using System.Windows.Forms; 

namespace MyCustomControls 
{ 

public delegate void MyDelegate(Object sender, EventArgs e); 

class MyListView : ListView 
{ 

    private static readonly object EventRightClickRaised = new object(); 

    public MyListView() 
    { 
     //RightClick += new MyDelegate(OnRightClick); 
    } 

    public event EventHandler RightClick 
    { 
     add 
     { 
      Events.AddHandler(EventRightClickRaised, value); 
     } 
     remove 
     { 
      Events.RemoveHandler(EventRightClickRaised, value); 
     } 
    } 

    protected override void OnMouseUp(MouseEventArgs e) 
    { 
     if (e.Button == MouseButtons.Right) 
     { 
      OnRightClick(EventArgs.Empty); 
     } 
     base.OnMouseUp(e); 
    } 

    protected void OnRightClick(EventArgs e) 
    { 
     EventHandler RightClickRaised = (EventHandler)Events[EventRightClickRaised]; 
     if (RightClickRaised != null) 
     { 
      RightClickRaised(this, e); 
     } 
    } 

} 
} 
3

Utilisez MouseUp au lieu de MouseClick! Désolé pour ça. Aurait dû googler plus fort.

-1

J'ai eu le même problème (voulez attraper droite clics sur le contrôle), la solution utilisait MouseEnter(). Devrait être utile pour ce que vous voulez faire.