2015-10-06 2 views
1

В моем проекте у меня есть ListView, и я хотел бы открыть мой ContextMenuStrip, когда я нажал правую кнопку на большом значке. Я много пробовал, но я не увенчался успехом. Когда я нажимаю правой кнопкой мыши внутри ListView, открывается окно ContextMenuStrip, но я хочу видеть, когда я щелкнул правой кнопкой мыши по большому значку.Listview Large Icon Щелкните правой кнопкой мыши, чтобы открыть ContextMenuStrip

enter image description here

Также мне нужно, чтобы помочь о получить имя Clicked значка (свойства).

+0

Вы попробовали мой код? Я обновил его, чтобы работать с (вертикально прокрученные LV) – TaW

+0

Я пробовал, но я не уверен, что понимаю истинное:/i не смог обработать ваш код в элементе списка:/ – abbays

+0

Какие у вас проблемы? Какой у вас код раньше? – TaW

ответ

1

Это быстрое и грязное решение; пожалуйста, положить больше работы в ней, чем я ..

// a class level reference, prepare it where you want.. 
ContextMenuStrip ms = new ContextMenuStrip(); 

Вы должны либо кодируют MouseDown или MouseUp событие:

private void listView1_MouseDown(object sender, MouseEventArgs e) 
{ 
    // disassociate from listview at first: 
    listView1.ContextMenuStrip = null; 

    // check for right button 
    if (e.Button != System.Windows.Forms.MouseButtons.Right) return; 

    // get item info: 
    ListViewHitTestInfo hi = listView1.HitTest(e.Location); 

    // no item hit: 
    if (hi.Item == null) return; 

    // calculate the image rectangle: 

    // this contains the unscrolled y coordinate: 
    Point iloc = listView1.GetItemRect(hi.Item.Index).Location; 
    // we combine it with the x-position: 
    Rectangle r = new Rectangle(new Point (hi.Item.Position.X, iloc.Y), 
           imageList1.ImageSize); 
    // no image hit: 
    if (!r.Contains(e.Location)) return; 

    // maybe prepare or change the menue now.. 
    // here I display the image name from the keys array: 
    ms.Items[0].Text = imageList1.Images.Keys[hi.Item.ImageIndex]; 
    ms.Location = e.Location; 

    // associate with listview and show 
    listView1.ContextMenuStrip = ms; 
    ms.Show(); 
} 
0

Можете ли вы попробовать следующее и пусть видеть погоду он работает или не ... частная пустота listView1_MouseClick (объект отправителя, MouseEventArgs е) {
если (e.Button == MouseButtons.Right) { если (listView1.FocusedItem.Bounds.Contains (e.Lo катион) == true) { contextMenuStrip1.Show (Cursor.Position); } }
}

+0

Я пробовал эти коды, но когда вы нажимаете где-то в listview, все еще работает contentMenuStrip. Я просто хочу увидеть contextMenuStrip, когда я нажал на элемент, и я хочу получить свойства элемента для использования. – abbays

0

Это должно работать

private void listView1_MouseClick(object sender, MouseEventArgs e) { ListView listView = sender as ListView; if (e.Button == System.Windows.Forms.MouseButtons.Right) { ListViewItem item = listView.GetItemAt(e.X, e.Y); if (item != null) { item.Selected = true; contextMenuStrip1.Show(listView , e.Location); } } }

Поиск элемента ListView по щелчку мыши месте. Если он есть, покажите меню .........