Listview Large Icon Щелкните правой кнопкой мыши, чтобы открыть ContextMenuStrip

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

введите здесь описание изображения

Также мне нужно помочь получить имя (свойства) щелкнутого значка.


person abbays    schedule 06.10.2015    source источник
comment
Вы пробовали мой код? Я обновил его для работы с (вертикально прокручиваемыми LV)   -  person TaW    schedule 06.10.2015
comment
Я пытался, но я не уверен, что понимаю правду: / я не мог работать с вашим кодом в моем элементе списка: /   -  person abbays    schedule 06.10.2015
comment
Какие проблемы у тебя? Какой код у вас был раньше?   -  person TaW    schedule 06.10.2015
comment
Я хотел бы открыть ContextMenuStrip, когда я щелкнул элемент списка, и мои элементы создаются динамически.   -  person abbays    schedule 06.10.2015
comment
И я хотел бы узнать, как использовать это свойство элементов динамики   -  person abbays    schedule 06.10.2015
comment
Да, это то, что вы написали в вопросе. Но какие у вас проблемы с моим кодом?? Он использует событие MouseDown (или, если вы предпочитаете Mouseup) и использует ContextMenuStrip. Согласно вашему вопросу, у вас уже все работает, кроме ограничения активной области на изображение, верно?   -  person TaW    schedule 06.10.2015
comment
О, теперь я устал и изменил что-то, что работает, но визуальная студия сказала, что sz не существует в вашем проекте, тогда как я могу использовать эти элементы, знаете ли вы какой-либо учебник по работе с элементами динамики в списке. Огромное спасибо.   -  person abbays    schedule 06.10.2015
comment
sz прокрался обратно. Это imageList1.ImageSize; Я обновил код. Пожалуйста, изучите код, чтобы увидеть, как ссылаться на элемент, на который вы нажали (например, с помощью hi.Item), и как вы можете использовать его свойство ImageIndex для ссылки на изображение в ImageList и его свойствах. Все в коде!   -  person TaW    schedule 06.10.2015


Ответы (3)


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

// 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();
}
person TaW    schedule 06.10.2015

Не могли бы вы попробовать следующее и посмотреть, работает ли это или нет... .Contains(e.Location) == true) { contextMenuStrip1.Show(Cursor.Position); }
}

person Amol    schedule 06.10.2015
comment
Я пробовал эти коды, но когда щелкаю где-нибудь в списке, contentMenuStrip все еще работает. Я просто хочу видеть contextMenuStrip, когда я нажимаю на элемент, и я хочу получить свойства элемента для использования. - person abbays; 06.10.2015

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

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); } } }

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

person Amol    schedule 07.10.2015