Как получить проводник в контекстном меню Winforms ListView? - PullRequest
4 голосов
/ 22 февраля 2010

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

Возможно ли это? Как включить его для моего приложения ListView?

Ответы [ 3 ]

2 голосов
/ 22 февраля 2010

У меня действительно были проблемы с отображением контекстного меню при щелчке правой кнопкой мыши: Неустойчивое поведение из ContextMenu

Я все еще реализовал немного по-другому:

    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;
        }
    }
2 голосов
/ 22 февраля 2010

Единственный способ сделать это - использовать pinvoke и COM для этого. Я думаю, что неуправляемый API - это SHCreateDefaultContextMenu () . Как только вы закончите взаимодействие (сначала проверьте pinvoke.net), вы можете выполнить взаимодействие для всех других вещей, необходимых для DEFCONTEXTMENU . Это не будет легко. Добро пожаловать в страну PIDL.

1 голос
/ 13 декабря 2010

Вам потребуется интерфейс IContextMenu .Также смотрите эту очень полезную серию .

...