【问题标题】:C# Form Popup Menu BehaviourC# 表单弹出菜单行为
【发布时间】:2013-12-06 05:29:51
【问题描述】:
奇怪的是,我似乎找不到这个问题的答案。
使用普通的ContextMenuStrip,当用户右键单击弹出菜单时。如果菜单已经打开,它将在新的鼠标位置打开。
我希望使用表单来实现同样的行为。
如果我使用Form.Show(),表单会打开,但是当用户右键单击并且表单已经打开时,它会关闭,并且需要用户右键单击两次。
如果我使用Form.ShowDialog(),表单在失去焦点时不会关闭。
那么,如何在右键单击时显示表单,然后如果用户再次右键单击,关闭第一个表单并在新位置再次打开它?
【问题讨论】:
标签:
c#
forms
focus
popupwindow
【解决方案1】:
假设您有一个主窗体和一个弹出窗体,您必须处理一些事件。此弹出表单应将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...
}
}