我有一个应用程序(mainApp
),它会打开一个模式对话框(collector
),以询问登录详细信息。该对话框在右上角有一个取消按钮和一个标准关闭按钮,并带有FormBorderStyle = FixedDialog
。
如果设置collector.ShowInTaskBar = true
,则可以右键单击任务栏中的对话框并将其关闭。对话框消失,主应用程序仍在运行。我也可以右键单击整个组,然后选择“关闭所有窗口”,这将关闭对话框和应用程序。
如果设置collector.ShowInTaskBar = false
,则可以右键单击任务栏中的应用程序,然后单击关闭,但是什么也没有发生。
我不希望在任务栏中显示该对话框,但希望从任务栏关闭该应用程序后将其关闭。我怎样才能做到这一点?如果这不可能,我将只关闭对话框。
编辑:主窗体的FormClosing事件不被调用时 ShowInTaskBar = false
当您以这种方式关闭表单时,该消息WM_SYSCOMMAND
将发送到表单窗口。我们可以使用一些有用的参数来捕获此消息以执行相应的操作。试试这个代码:
public partial class Form1 : Form {
public Form1(){
InitializeComponent();
}
bool shownModal;//This flag will be used to determine if there is some
//modal dialog opening.
protected override void WndProc(ref Message m) {
if (m.Msg == 0x112)//WM_SYSCOMMAND
{
//SC_CLOSE = 0xf060
if (m.WParam.ToInt32() == 0xf060 &&
m.LParam.ToInt32() == 0 && shownModal)
{
//Your own code here
//You can close the main form or close the modal dialog
Close();
}
}
base.WndProc(ref m);
}
}
注意:您必须shownModal
在显示对话框之前打开标志,然后再关闭。这只是处理它的一种方法,您可以尝试自己的另一种方法。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句