奇怪的是,我似乎找不到这个答案。
使用正常ContextMenuStrip
,当用户右键单击弹出菜单时,会打开。如果菜单已打开,则会在新鼠标位置打开。
我希望使用表单实现相同的行为。
如果我使用Form.Show()
表单会打开,但是当用户右键单击并且表单已经打开时,它会关闭,并要求用户右键单击两次。
如果我使用Form.ShowDialog()
,则表单在失去焦点时不会关闭。
那么,如何在右键单击时显示表单,然后如果用户再次单击右键,关闭第一个表单并在新位置再次打开它?
答案 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...
}
}