Щелкните правой кнопкой мыши меню и строку меню

#c# #winforms

#c# #winforms

Вопрос:

Цель:
щелкнуть правой кнопкой мыши в listview и выбрать другой вариант.

Проблема:
Есть две проблемы:
* Когда я щелкаю правой кнопкой мыши, левый угол меню находится не совсем в том месте, где указано стрелкой.
* Как мне создать строку в меню?

Основная проблема с меню

При щелчке правой кнопкой мыши меню оказывается не в нужном месте

Нужна поддержка для создания этих двух красных меток.

Запрос на выполнение этих двух отмечен красным

 private void lstV_Stock_MouseUp(object sender, MouseEventArgs e)
{
    switch (e.Button)
    {

        // Right mouse click
            case MouseButtons.Right:


                ContextMenu myContextMenu = new ContextMenu();

                MenuItem menuItem1 = new MenuItem("New product");
                MenuItem menuItem2 = new MenuItem("Delete");
                MenuItem menuItem3 = new MenuItem("Add quantity");


                // Clear all previously added MenuItems.
                myContextMenu.MenuItems.Clear();

                myContextMenu.MenuItems.Add(menuItem1);
                myContextMenu.MenuItems.Add(menuItem2);
                myContextMenu.MenuItems.Add(menuItem3);

                if (lstV_Stock.SelectedItems.Count > 0) 
                {

                    foreach (ListViewItem item in lstV_Stock.SelectedItems)
                    {
                        myContextMenu.MenuItems[1].Visible = true;
                        myContextMenu.MenuItems[2].Visible = true;
                        myContextMenu.MenuItems[0].Visible = false;
                    }

                }
                else
                {
                    myContextMenu.MenuItems[1].Visible = false;
                    myContextMenu.MenuItems[2].Visible = false;
                    myContextMenu.MenuItems[0].Visible = true;
                }

                myContextMenu.Show(lstV_Stock, this.PointToClient(Cursor.Position), LeftRightAlignment.Right);



                menuItem1.Click  = new System.EventHandler(this.menuItem1_Click);


                break;

        }
  

Комментарии:

1. Строка между элементами contextmenu является разделителем. Просто добавьте в свою строку contextmenu.

Ответ №1:

Для позиционирования вы можете заменить

 myContextMenu.Show(lstV_Stock, this.PointToClient(Cursor.Position), LeftRightAlignment.Right);
  

Для

 myContextMenu.Show(lstV_Stock, e.Location(), LeftRightAlignment.Right);
  

или точку e.X, e.Y. Не из этого.PointToClient, но из MouseEventArgs, генерирующего событие. Вы можете проверить, что есть у MouseEvent здесь.

Комментарии:

1. Я использовал вместо этого «myContextMenu. Показать(lstV_Stock, т. е. Местоположение, выравнивание по левому краю. Справа);»

Ответ №2:

Чтобы создать «строку», вы должны создать элемент меню с текстом «-«

Ответ №3:

Проблема

  1. Если вы просто установите ListView.Свойство ContextMenu и удалите весь ваш собственный код щелчка правой кнопкой мыши, меню должно отображаться правильно.
  2. Для строки вам нужен элемент ToolStripSeparator. Дизайнер создаст его, когда вы введете ‘-‘ в качестве текста. Вы можете перетащить их в конструктор.

Комментарии:

1. 1 — Я не знал, что вы можете вставить разделитель, просто набрав «-«.

Ответ №4:

Итак, здесь можно использовать ContextMenu. Те «Строки», на которые вы ссылаетесь, называются разделителями.

Если вы создаете контекстное меню в режиме конструктора, затем щелкните контекстное меню, затем щелкните правой кнопкой мыши внутри меню и выберите Вставить > Разделитель.

Затем вы можете перетащить его вверх или вниз или в подменю, если хотите.