2013-12-06 3 views
0

Странно, я не могу найти ответ на этот вопрос.C# Form Popup Menu Behavior

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

Я хочу реализовать это же поведение с использованием формы.

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

Если я использую Form.ShowDialog(), форма не будет закрываться, когда она теряет фокус.

Итак, как я могу показать форму на правом щелчке, тогда, если пользователь снова нажмет, закройте первую форму и откройте ее снова в новом месте?

ответ

0

Вам необходимо обработать некоторые события, предположим, что у вас есть основная форма и всплывающая форма. Это всплывающее окно форма должна Owner набор к основной форме:

PopupForm popup = new PopupForm(); 
popup.Owner = mainForm;//or this if the code is placed in the MainForm class 
//MouseUp event handler for your mainForm 
private void mainForm_MouseUp(object sender, MouseEventArgs e){ 
    if(e.Button == MouseButtons.Right){ 
    popup.Location = PointToScreen(e.Location); 
    if(!popup.Visible) popup.Visible = true; 
    } else if(popup.Visible) { 
    popup.Hide();//Don't close, just hide, otherwise you have to handle more... 
    } 
} 
+0

Спасибо, но если мне нужно, чтобы закрыть форму, что я должен обращаться? – Simon

+0

@Simon Вы имеете в виду закрытие основной формы или всплывающей формы? –

+0

Закрыть всплывающее окно :) – Simon