2016-01-23 3 views
3

У меня есть ToolStripDropDownButton, где в подпунктах есть CheckOnClick.Не закрывать ToolStripDropDownButton на подпункте Проверено

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

Я видел подобный вопрос How do I close a toolstripmenuitem that is set to autoclose = false?, но предложение поместить обработчик для события Click на каждый компонент не совсем то, что мне нужно. Это должно быть, когда он теряет фокус, независимо от того, с помощью мыши или клавиатуры.

Я посмотрел на Leave, но в то время как ToolStrips сами имеют это событие, видимо, ToolStripDropDownButton этого не делает.

Какой был бы лучший способ сделать это?

ответ

4

Оказывается, есть очень простой способ сделать это, чего я еще не понял. Событие Closing указывает, почему ToolStripDropDownButton закрывается, и одной из причин является то, что элемент был нажат.

ToolStripDropDownButton непосредственно не имеет Closing события, но так как это просто обертка для ToolStripDropDown это разоблачить, что через ToolStripDropDownButton.DropDown.Closing

Так что я просто сделал следующее:

toolStripDropDownButton1.DropDown.Closing += toolStripDropDownButton1_Closing; 

private void toolStripDropDownButton1_Closing(object sender, ToolStripDropDownClosingEventArgs e) 
{ 
    if (e.CloseReason == ToolStripDropDownCloseReason.ItemClicked) 
    { 
     e.Cancel = true; 
    } 
} 

Таким образом, Я только предотвращаю его закрытие, если элемент щелкнут, но не препятствует его закрытию, если, скажем, пользователь нажимает за пределами ToolStripDropDownButton или если он теряет фокус.

+0

Работы для 'ToolStripSplitButton' тоже. – Norman