加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-16 01:52:44 所属栏目:百科 来源:网络整理
导读:如果我在打开模式对话框时以编程方式最小化应用程序的表单,则会关闭该模式对话框. 但是,如果我在MessageBox打开时以编程方式最小化应用程序的形式,则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在那里并且令人讨厌.

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读