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();
}
}