C#表单弹出菜单行为

时间:2013-12-06 05:29:51

标签: c# forms focus popupwindow

奇怪的是,我似乎找不到这个答案。

使用正常ContextMenuStrip,当用户右键单击弹出菜单时,会打开。如果菜单已打开,则会在新鼠标位置打开。

我希望使用表单实现相同的行为。

如果我使用Form.Show()表单会打开,但是当用户右键单击并且表单已经打开时,它会关闭,并要求用户右键单击两次。

如果我使用Form.ShowDialog(),则表单在失去焦点时不会关闭。

那么,如何在右键单击时显示表单,然后如果用户再次单击右键,关闭第一个表单并在新位置再次打开它?

1 个答案:

答案 0 :(得分: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...
  }
}