微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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在那里并且令人讨厌.

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐