Combobox внутри проблемы ContextMenuStrip - PullRequest
0 голосов
/ 17 июня 2011

С учетом следующей безумной настройки (ComboBox внутри UserControl внутри ToolStripControlHost внутри ContextMenuStrip):

enter image description here

происходит что-то странное, когда вы нажимаете на разные элементы во всплывающем окне ComboBox. Если элемент находится внутри границ меню (например, Амстердам, Брюссель или Люксембург), элемент выбирается. Если пункт находится за пределами меню (т. Е. Берлин и далее), меню закрывается немедленно.

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

1 Ответ

3 голосов
/ 21 июня 2011

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

В основном необходимо отклонить событие ContextMenuStrip.OnClosing, если отображается ComboBox.Есть неизбежно более чистое решение, но я его не видел.

public bool IsDropDownShowing { get; private set; }
private void InitializeContextMenu()
{
    var userControl = new ComboMenuUserControl();
    var toolStripHost = new ToolStripControlHost(userControl);
    contextMenuStrip1.Items.Add(toolStripHost);

    userControl.comboBox1.DropDown += (o, args) => IsDropDownShowing = true;
    userControl.comboBox1.DropDownClosed += (o, args) => IsDropDownShowing = false;

    contextMenuStrip1.Closing += (o, args) =>
                                    {
                                        if (IsDropDownShowing == true)
                                            args.Cancel = true;
                                    };
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...