2013-03-02 3 views
0

Я занимаюсь этой проблемой весь день. У меня есть menustrip с несколькими пунктами меню. Каждый деталь, также имеет много деталей. Теперь, если я нажму на элемент родительского меню, контейнер (аналогичный контекстуменю) останется открытым до тех пор, пока я не щелкнуть где-нибудь еще.Закрытие Winform MenuStrip, когда мышь покидает контейнер

enter image description here

В примере изображения «Clientes» будет родительский элементом, и его «контейнер» с их пунктами меню ребенка.

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

Мне нужна помощь здесь, надеюсь кто-нибудь может дать мне совет.

Я пытался использовать событие MouseLeave родителей пунктов («Clientes» и т.д.), и там же:

private void clientesToolStripMenuItem_MouseLeave(object sender, EventArgs e) 
    { 
     clientesToolStripMenuItem.DropDown.Close(); 
    } 

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

Надеюсь, кто-то может мне помочь.

+0

Какой контроль вы используете? 'MenuStrip'? –

+0

@ OscarMederos Да. Вон тот. – Andres

ответ

1

Вы можете добиться этого, обработав события clientesToolStripMenuItem самостоятельно. Когда мышь входит в прямоугольник главного меню ваших клиентов, просто покажите свой контейнер и спрячьте его, когда он покинет этот прямоугольник. Предполагая, что picContainer является вашим прямоугольником, вы можете сделать что-то вроде этого:

private void clientToolStripMenuItem_MouseEnter(object sender, EventArgs e) 
{ 
    picContainer.Location = clientToolStripMenuItem.ContentRectangle.Location; 
    picContainer.Show(); 
} 

private void clientToolStripMenuItem_MouseLeave(object sender, EventArgs e) 
{ 
    this.picContainer.Hide(); 
} 
+0

Благодарим вас за ответ. Но я не понимаю слишком много вашего решения. Как вы сказали, picContainer будет моим прямоугольником. Как я могу это создать? Кроме того, я замечаю, что вы скрываете его, когда мышь покидает clientToolStripMenuItem, мне нужно скрывать/закрывать, когда он покидает какой-либо элемент контейнера. На всякий случай я вызываю контейнер в contentcutangle элемента со всеми его элементами меню childs. Надеюсь, вы можете объяснить мне немного больше, пожалуйста. Еще раз спасибо! – Andres

+0

В вашем вопросе вы сказали о «контейнере (аналогичном контекстуменю)». На изображении этот контейнер имеет пункты меню, такие как «Nuevo cliente» и т. Д., Верно? PicContainer в моем примере эквивалентен этому. Во-вторых, почему вы скрываете/закрываете, когда он покидает какой-либо элемент контейнера, его уже скрыты. Вы хотите показать его только тогда, когда мышь перемещается в область этого конкретного меню Clientes, правильно? –

+0

Да, это правильно. Спасибо за попытку помочь, но мне больше не нужен ответ. Я просто реализовал меню по-другому. – Andres

Смежные вопросы