Добавьте событие click в список, заполненный объектами в коде - PullRequest
0 голосов
/ 03 мая 2010

Я пытаюсь вызвать контекстное меню, щелкнув правой кнопкой мыши элемент в списке. Так что я привязываю список «пользователей» к моему списку. Тогда я немного растерялся. Я думал, что смогу зайти в список и добавить событие мыши прямо в список, но не могу понять, как.

Это хороший способ, или кто-нибудь знает лучший способ выполнить то, что я хочу.

Заранее спасибо.

Ответы [ 6 ]

1 голос
/ 13 мая 2010

Вы можете сделать 2 вещи, которые могут решить проблему, с которой вы столкнулись:

1) Если вы используете usercontrols для заполнения списка, вы можете добавить в него события клика.

2) Если вы добавляете контекстное меню в список, щелчок правой кнопкой мыши по элементу автоматически откроет контекстное меню, поэтому вам не нужно добавлять в него событие щелчка.

1 голос
/ 03 мая 2010

Это будет работать:

        private void listBox1_MouseDown(object sender, MouseEventArgs e)
    {
        if (e.Button == MouseButtons.Right)
        {
            Point p = new Point(e.X, e.Y);
            listBox1.SelectedIndex = listBox1.IndexFromPoint(p);
            contextMenuStrip1.Show();
        }
    }

Редактировать: слишком поздно, сри;)

0 голосов
/ 06 апреля 2016
 private void listBox1_MouseDown(object sender, MouseEventArgs e)
{
    if (e.Button == MouseButtons.Right)
    {
        Point p = new Point(e.X, e.Y);
        listBox1.SelectedIndex = listBox1.IndexFromPoint(p);
        contextMenuStrip1.Show();
    }
}
0 голосов
/ 03 мая 2010

Это ответит на ваш вопрос, я думаю:

http://social.msdn.microsoft.com/Forums/en-US/wpf/thread/2c8f00ca-9c7d-4237-b2cf-f60911a008a9

0 голосов
/ 03 мая 2010

Прошло немного времени с тех пор, как я это сделал, но если я правильно помню:

  • Вы должны вызвать событие правой кнопкой мыши вниз
  • Определить местоположение курсора в это время
  • Спросите в списке, какой элемент находится в этих координатах.

В списке есть метод для этого ...

Edit: Здесь есть код:

    private void listBox1_MouseDown(object sender, MouseEventArgs e)
    {
        if (e.Button != System.Windows.Forms.MouseButtons.Right)
            return;

        int index = listBox1.IndexFromPoint(e.X, e.Y);

        MessageBox.Show(listBox1.Items[index].ToString());

    }

Очевидно, вам необходимо добавить проверку ошибок, если в этот момент есть элемент и т. Д.

0 голосов
/ 03 мая 2010

возможно вы можете попасть в Mousdown Event из списка, ведь выбран пункт. Или вы делаете правый клик без выбранного элемента?

...