2011-01-02 4 views
0

Ich habe eine Listview mit einigen Einzelteilen. In der ListView sind einige Gruppen definiert, einige Spalten und einige Elemente wurden hinzugefügt. Die ListView hat auch das ContextMenu gesetzt.Handhabung Context auf Listview

Auf Öffnen Ereignis des ContextMenu, ich werde überprüfen, ob das Kontextmenü auf einem ListView Element geöffnet wurde. Also, ich tat:

private void CtxMenuProcess_Opening(object sender, CancelEventArgs e) 
{ 
    ContextMenuStrip ctxMenuStrip = (ContextMenuStrip)sender; 
    ListViewHitTestInfo hitTestInfo = LstViewAdminApp.HitTest(LstViewAdminApp.PointToClient(Control.MousePosition)); 

    if (hitTestInfo.Item != null) { 
     //.... 
    } 
} 

Leider passiert der Treffer nicht.

Ich fühle, dass die Koordinaten der ctxMenuStrip die falschen sind, aber ich habe eine Menge "Varianten" ohne Erfolg versucht, und die Dokumentation von ListView.HitTest ist sehr schlecht.

Wer kann mir helfen?


Weitere Untersuchung bringt keine Lösung. Ich fange an, über die Initialisierung des ListView-Steuerelements zu verdächtigen. Hier ist die nicht Standardeigenschaften I gesetzt haben:

  • Aktivierung = OneClick
  • Columns = Colum [3]
  • Context = ContextMenu
  • Dock = Fill
  • FullRowSelect = true
  • Gridlines = true
  • Groups = Gruppe [3]
  • HideSelection = false
  • LabelWrap = false
  • Sortierung = aufsteigend
  • View = Einzelheiten
+0

Die 'Location' Eigenschaft ist bedeutungslos. – SLaks

+0

Danke SLaks. Ich habe schon bemerkt, von http://stackoverflow.com/questions/3443232/get-the-point-of-click-on-a-control – Luca

+0

Ich denke, ListView.HitTest erfordert Client-Koordinaten. Aber immer noch nicht funktioniert. – Luca

Antwort

0

Wenn ich so etwas wie dies vor einiger Zeit arbeitete, fand ich den Code in this example sehr nützlich sein.

+0

Vielen Dank, aber ich kann nicht verwenden, um Windows Messaging mein Problem zu lösen. Derselbe Code soll auch in Mono unter Linux laufen. – Luca