C# 窗体弹出菜单行为

本文关键字:菜单 窗体 | 更新日期: 2024-07-27 02:42:47

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

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

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

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

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

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

C# 窗体弹出菜单行为

你必须处理一些事件,假设你有一个主窗体和一个弹出窗体。此弹出窗体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...
  }
}