c# – 最小化应用程序表单会导致模式窗体关闭,但不会关闭MessageBox

如果我在打开模式对话框时以编程方式最小化应用程序的表单,则会关闭该模式对话框.

但是,如果我在MessageBox打开时以编程方式最小化应用程序的形式,则MessageBox不会关闭(即,当我将应用程序恢复到正常窗口状态时,消息框仍然显示).

这是我展示差异的示例代码

public partial class Form1 : Form
    {
        // ... 

        private void showMessageBoxBtn_Click(object sender,EventArgs e)
        {
            timer1.Start();

            // This MessageBox does *not* get closed when the WindowState of Form1 is set to minimized in timer1_Tick
            MessageBox.Show(this,"MessageBox");
        }

        private void formShowDialogBtn_Click(object sender,EventArgs e)
        {
            timer1.Start();

            // This form gets closed when the WindowState of Form1 is set to minimized in timer1_Tick
            Form2 form2 = new Form2();
            form2.ShowDialog(); 
        }

        private void timer1_Tick(object sender,EventArgs e)
        {
            WindowState = FormWindowState.Minimized;
            timer1.Stop();
        }
    }

题:

有没有办法让Form表现得像MessageBox

解决方法

您所看到的是Winforms内置的对策的副作用,以处理对话可用性问题,MessageBox()函数没有的对策.它们可能与Windows 98更相关,Windows 98最初是Winforms的重要目标操作系统,很久以前我才能准确记住.

一个重要的可用性问题是当您显示一个对话框并且它被最小化时会发生什么.一个对话框禁用应用程序中的所有其他窗口,因此您无法再激活它们.该对话框应将其ShowInTaskbar属性设置为false.用户现在遇到问题,没有简单的方法可以回到对话框.没有什么可点击的.

Winforms通过自动关闭对话框来避免此陷阱.如您所知,MessageBox不会这样做.它也无法合理地做到这一点,它没有一个好的方法来返回“对话框被取消”状态代码.

值得注意的是,这个陷阱仍然存在.在我的Win8机器上,我可以单击禁用的表单的任务栏按钮,让它在前台移回.但是这会激活禁用的表单而不是消息框.如果消息框在该表单后面,那么主要的UI blooper在那里并且令人讨厌.

所以回答你的问题:不.功能,而不是错误.

相关文章

目录简介使用JS互操作使用ClipLazor库创建项目使用方法简单测...
目录简介快速入门安装 NuGet 包实体类User数据库类DbFactory...
本文实现一个简单的配置类,原理比较简单,适用于一些小型项...
C#中Description特性主要用于枚举和属性,方法比较简单,记录...
[TOC] # 原理简介 本文参考[C#/WPF/WinForm/程序实现软件开机...
目录简介获取 HTML 文档解析 HTML 文档测试补充:使用 CSS 选...