Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/6.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#_Wpf - Fatal编程技术网

C# 显示子窗口时,将最小化父窗口

C# 显示子窗口时,将最小化父窗口,c#,wpf,C#,Wpf,当打开子窗口时,是否可以使父窗口最小化并处于非活动状态(子窗口是模态的)? 在调用子窗口之前,我尝试将父窗口的WindowsState属性更改为最小化,但子窗口开始最小化。在子窗体加载事件中,尝试以下操作: frmParent frm = new frmParent(); frm.WindowState = FormWindowState.Minimized; 你的设计有缺陷 您有两个顶级窗口,主窗体和子模式对话框。在Win32术语中,子模式对话框被称为自有窗口。主要形式为非自有。当顶级非自有

当打开子窗口时,是否可以使父窗口最小化并处于非活动状态(子窗口是模态的)?
在调用子窗口之前,我尝试将父窗口的WindowsState属性更改为最小化,但子窗口开始最小化。

在子窗体加载事件中,尝试以下操作:

frmParent frm = new frmParent();
frm.WindowState = FormWindowState.Minimized;

你的设计有缺陷

您有两个顶级窗口,主窗体和子模式对话框。在Win32术语中,子模式对话框被称为自有窗口。主要形式为非自有。当顶级非自有窗口最小化时,它拥有的所有窗口都将隐藏。这是桌面窗口管理器提供的功能

各国:

拥有的窗口在其 所有者最小化

不管怎样,你想做的事情听起来很不寻常。通常,当一个窗体显示模式对话框时,模式对话框显示在另一个窗体的顶部。为什么要隐藏主窗体


如果你对这个设计一成不变,你需要安排你的模态对话框是一个无人拥有的窗口。当您这样做时,它将作为一个项目出现在任务栏中,与主窗体分开。这就是您想要的吗?

不确定为什么要这样做,但通过一些技巧(或好的设计模式)可以做到这一点。通过欺骗,您可以做到这一点:

来自家长(表格1):


尽管如此,我还是建议您重新考虑您的体系结构。

嗯,我想您可能误解了我的意思:当我有父窗口并单击按钮打开子窗口时,我希望父窗口最小化,新打开的窗口保持打开状态。是的,这就是它要做的。frmParent应该是父windows窗体名称。您将前面的代码放在子窗体加载事件中,这将最小化父窗口。@MrRoy这不起作用,即使您修复了代码,使其引用预先存在的父窗口,而不是创建新的父窗口。您也可以在调用子窗体的事件中使用
this.WindowState=FormWindowState.minimized
。另外,要使父窗口处于非活动状态,请使用
frmChild.ShowDialog()而不是
frmChild.Show()还有,这不是针对windows窗体的吗?我使用的是WPF,那里没有窗体WindowsState,只有WindowsState。哦:(我想要一个主窗体,比如说,其中有一个启动“游戏”的按钮),当点击按钮时,游戏窗口将打开并一直保持到关闭,然后在主窗体中显示结果。我认为这是一个好主意。有很多不同的方法来实现这种效果。你需要考虑任务栏按钮。一旦主窗体被隐藏(例如)我想你不希望它有一个任务栏按钮。你希望游戏放在任务栏上。一个值得考虑的选项是将你认为的主窗体放在一个面板上,将游戏放在另一个面板上,两个面板都放在同一个窗体中,然后在切换模式时在它们之间切换。如果是这样,我将不得不重新考虑我的程序。我想我会加载用户控件或创建选项卡。无论如何,谢谢!你可以使用选项卡并使选项卡不可见;不知道WPF术语。这是一种非常常见的方法。我认为这并不罕见。许多UI设计师都哀叹模式对话框意味着一个不可用、不可移动、不可移动和不可隐藏的父窗口一直存在nd显示子窗口时。最小化父窗口是解决此问题的一个非常合理的解决方案。隐藏父窗口可能是另一个解决方案,尽管它需要模式对话框有自己的任务栏图标,这意味着任务栏图标似乎在跳跃。这是一个非常困难的问题。+1此代码适用于我的回答中提出了e窗口拥有问题。只需重新测试它-Windows 7 x64 ult,VS 2010,.NET 4.0客户端。工作正常。如果您有问题,另一种方法是将最后两行放在form2的重写处理方法中,如form1_2;.WindowsState…您需要将form1传递到form2的构造函数中才能正常工作。当然,两种方法都可以同样的工作。
       private void button1_Click(object sender, EventArgs e)
    {
        this.WindowState = FormWindowState.Minimized;
        this.ShowInTaskbar = false;
        new Form2().ShowDialog(this);
        this.WindowState = FormWindowState.Normal;
        this.ShowInTaskbar = true;
    }