Как найти контекстное меню было показано и не обрабатывать события клика - PullRequest
1 голос
/ 08 августа 2011

У меня быстрый вопрос,

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

Моя проблема в том, что если пользователь решит ничего не выбирать и выйдет из контекстаменю, пока оно отображается, следует щелкнуть левой кнопкой мыши на элементе управления, поскольку при щелчке правой кнопкой мыши меню снова появится.Но на данный момент контекстное меню уже набрано, и остальная часть левого клика также выполняется.Как проверить, что контекстное меню было показано при щелчке левой кнопкой мыши, и пользователь хочет выйти из контекстного меню и не выполнять логику начала рисования / отбрасывания.

Дополнительная информация: Я работаю на C #В проекте я попытался зафиксировать событие закрытия контекстного меню, но оно срабатывает и закрывается до того, как перейдет к элементу управления мыши, и я не могу проверить, отображалось ли ранее контекстное меню, чтобы избежать прохождения оставшейся левой кнопки мыши по логике события вниз.

Заранее благодарен за любую помощь.

1 Ответ

2 голосов
/ 08 августа 2011

Вот простое решение.

Предположим, у вас есть элемент управления ListBox в вашей форме, с которым связано ContextMenu. Теперь мы хотим добавлять элемент списка в элемент управления каждый раз, когда на него щелкают:

    private void listBox1_MouseClick(object sender, MouseEventArgs e)
    {
        listBox1.Items.Add("new item added - " + DateTime.Now.ToLongTimeString());
    }

Теперь определите переменную bool на уровне формы под названием menuClosed примерно так:

private bool menuClosed = false;

Теперь перехватите событие контекстного меню Закрыто , например, так и установите флаг:

    private void contextMenuStrip1_Closed(object sender, ToolStripDropDownClosedEventArgs e)
    {
        menuClosed = true;
    }

Теперь обновите код, который добавляет элемент в элемент управления списка, как показано ниже:

    private void listBox1_MouseClick(object sender, MouseEventArgs e)
    {
        if (!menuClosed)
            listBox1.Items.Add("new item added - " + DateTime.Now.ToLongTimeString());
    }

Я просто устанавливаю переменную bool в значение true, когда контекстное меню закрывается, затем я проверяю флаг bool, чтобы увидеть, следует ли добавлять элемент в список. Вы можете использовать этот же механизм для определения того, должна ли выполняться конкретная команда.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...