Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/325.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 为什么模态形式在最小化时完全消失?_C#_Winforms_Modal Dialog - Fatal编程技术网

C# 为什么模态形式在最小化时完全消失?

C# 为什么模态形式在最小化时完全消失?,c#,winforms,modal-dialog,C#,Winforms,Modal Dialog,当模态形式最小化时,我试图使所有者形式最小化。但当我最小化模态形式时,它就完全消失了。(-我可以单击所有者表单。) 我如何解决这个问题 我有: public partial class Form1 : Form { Form2 frm2 = new Form2(); public Form1() { InitializeComponent(); frm2.Owner = this; } private void butt

当模态形式最小化时,我试图使所有者形式最小化。但当我最小化模态形式时,它就完全消失了。(-我可以单击所有者表单。)

我如何解决这个问题

我有:

public partial class Form1 : Form
{
    Form2 frm2 = new Form2();

    public Form1()
    {
        InitializeComponent();
        frm2.Owner = this;
    }

    private void button1_Click(object sender, EventArgs e)
    {
        frm2.ShowDialog();
    }
}
以及:


(在尝试此操作时,我还遇到了以下问题:)

表单有一个属性
ShowInTaskbar
。如果将其设置为
false
,则即使最小化,表单也不会出现在任务栏上。

表单具有属性
ShowInTaskbar
。如果将其设置为
false
,则表单将永远不会出现在任务栏上,即使最小化也是如此。

我想不起来需要多少代码才能使模式窗口正常工作。我对您的评论“我可以点击所有者表单”表示关注,这使我相信表单没有正确设置为模态。根据定义,在用户控件返回到所有者窗体之前,必须处理模态窗体。最小化情态形式并不构成对情态形式的适当“处理”

下面是我过去使用过的一些代码。注意:在ShowDialog中将所有者作为参数传递将建立所有权关系。虽然我怀疑你的代码有效,但我并没有这样使用它

而且,当我这样做的时候,我没有在模态表单中放置任何特殊代码,也禁用了表单右上角的所有按钮;从而确保用户不能在我提供的任何按钮之外关闭、最小化或最大化模态形式

public partial class Form1 : Form
{
    Form2 frm2 = new Form2();

    public Form1()
    {
        InitializeComponent();
    }

    private void button1_Click(object sender, EventArgs e)
    {
        frm2.ShowDialog(this);
    }
}

我希望这能有所帮助。

我想不起来需要这么多代码才能让模态窗口正常工作。我对您的评论“我可以点击所有者表单”表示关注,这使我相信表单没有正确设置为模态。根据定义,在用户控件返回到所有者窗体之前,必须处理模态窗体。最小化情态形式并不构成对情态形式的适当“处理”

下面是我过去使用过的一些代码。注意:在ShowDialog中将所有者作为参数传递将建立所有权关系。虽然我怀疑你的代码有效,但我并没有这样使用它

而且,当我这样做的时候,我没有在模态表单中放置任何特殊代码,也禁用了表单右上角的所有按钮;从而确保用户不能在我提供的任何按钮之外关闭、最小化或最大化模态形式

public partial class Form1 : Form
{
    Form2 frm2 = new Form2();

    public Form1()
    {
        InitializeComponent();
    }

    private void button1_Click(object sender, EventArgs e)
    {
        frm2.ShowDialog(this);
    }
}

我希望这能有所帮助。

这是设计的。作为模态协定的一部分,显示对话框将禁用应用程序中的所有其他窗口。当用户最小化对话框窗口时,就没有用户可以访问的窗口了。使应用程序无法使用。Winforms通过在对话框最小化时自动关闭对话框来确保不会发生这种情况


显然,你会想要阻止这一切的发生。将MinimizeBox属性设置为false。MaximizeBox属性也应该设置为false,使两个按钮从窗口标题中消失。为帮助按钮留出空间。顺便说一句,这是设计的。作为模态协定的一部分,显示对话框将禁用应用程序中的所有其他窗口。当用户最小化对话框窗口时,就没有用户可以访问的窗口了。使应用程序无法使用。Winforms通过在对话框最小化时自动关闭对话框来确保不会发生这种情况

显然,你会想要阻止这一切的发生。将MinimizeBox属性设置为false。MaximizeBox属性也应该设置为false,使两个按钮从窗口标题中消失。为帮助按钮留出空间。顺便说一下。

添加:

Show();
在Form2事件处理程序的末尾添加:

Show();

在Form2事件处理程序的末尾。

我还要求在最小化对话框窗体时应最小化应用程序,在恢复应用程序时应再次显示对话框。以下是我所做的:

MainForm.cs

表格2.cs


我还要求在最小化对话框窗体时应最小化应用程序,在恢复应用程序时应再次显示对话框。以下是我所做的:

MainForm.cs

表格2.cs


Form2
ShowInTaskBar
设置为true了吗?@competent\u tech我刚刚试过。没什么区别。但是谢谢。
ShowInTaskBar
是否为
Form2
设置为true?@competable\u tech我刚刚试过。没什么区别。谢谢,我想你是在回答我的另一个问题。我刚试过。没什么区别。谢谢,我想你是在回答我的另一个问题。我刚试过。没什么区别。谢谢你的反馈。b) 但我不明白这个道理。如果一个用户为了查看另一个应用程序而想避开我的应用程序,他就想避开我的整个应用程序。为什么它不能用?他只需点击任务栏就可以重新获得它。我知道,当我使用SyncToy并且它在后台工作时,我会最小化同步的模式形式,并且我对无法最小化的所有者形式感到困扰。好吧,避免使用坏的应用程序作为示例。在VisualStudio中,使用工具+选项作为一个很好的示例。注意对话框的窗口标题,尝试最小化而不是将另一个应用程序的窗口放在前台当然没有问题。我的错误是,我看不到的是桌面(当然,我可以将其作为文件夹打开…)。无论如何,我看到我所寻找的不是一个(容易的)选择。再次感谢。a)感谢所有的反馈。b) 但我不明白这个道理。如果一个用户为了查看另一个应用程序而想避开我的应用程序,他就想避开我的整个应用程序。为什么它不能用?他只要点击任务栏就可以把它拿回来。我知道当我使用SyncToy时,它在b中工作
public partial class Form2 : Form
{
    bool isMinimized;

    private Form2()
    {
        InitializeComponent();
        ShowInTaskbar = false;
    }

    private void Form2_FormClosed(object sender, FormClosedEventArgs e)
    {
        if (Owner != null)
        {
            Owner.Enabled = true;
        }
    }

    private void Form2_Load(object sender, EventArgs e)
    {
        MinimizeBox = Owner != null;
        if (Owner != null)
        {
            Owner.Enabled = false;
        }
    }

    private void Form2_SizeChanged(object sender, EventArgs e)
    {
        if (Owner != null)
        {
            if (WindowState == FormWindowState.Minimized && Owner.WindowState != FormWindowState.Minimized)
            {
                Owner.Enabled = true;
                Owner.WindowState = FormWindowState.Minimized;
                isMinimized = true;
            }
            else if (isMinimized && Owner.WindowState != FormWindowState.Minimized)
            {
                Owner.Enabled = false;
            }
        }
    }

    public static void Show(Form owner, string message)
    {
        var form2 = new Form2();
        form2.label1.Text = message;

        if (owner != null)
            form2.Show(owner);
        else
            form2.ShowDialog();
    }
}