gpt4 book ai didi

winforms - 当模态对话框处于事件状态时,防止任务栏激活非模态表单

转载 作者:行者123 更新时间:2023-12-03 05:14:35 24 4
gpt4 key购买 nike

当任何对话框为模态时,我想防止激活我的 winforms 应用程序中的所有其他表单。 Outlook 的操作方式如下:打开两封新邮件,从一封邮件中打开地址簿,并且您无法使用任务栏或单击邮件窗口来激活另一封邮件。我如何在 winforms 应用程序中执行此操作(请注意,设置所有权不起作用)?

下面是示例应用程序。

using System.Drawing;
using System.Windows.Forms;

namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new MainForm());
}
}

public class MainForm : Form
{
public MainForm()
{
Text = "Main Form";
var button = new Button{Text = "New form"};
button.Click += (sender, args) => new Form2().Show();
//button.Click += (sender, args) => { var form = new Form2(); AddOwnedForm(form); form.Show(); };
Controls.Add(button);
button.Location = new Point(20, 20);
}
}

public class Form2 : Form
{
public Form2()
{
Text = "Form 2";
var button = new Button{Text = "New modal form"};
button.Click += (sender, args) => new Form{Text = "Modal Dialog", ShowInTaskbar = false}.ShowDialog();
Controls.Add(button);
button.Location = new Point(20, 20);
}
}
}

要重现该行为,请运行应用程序,打开两个 Form2 实例,然后从第二个实例打开模式对话框。然后使用任务栏激活第一个 Form2 实例,它会出现在模式对话框上方。

更新:此重现也适用于 WPF Windows。

更新:根据 Hans 的反馈,这似乎是一个错误,我已将此报告给 connect.microsoft.com here .

最佳答案

我重现,Win7。除了拥有这些表单以便它们不需要任务栏按钮之外,我没有看到明显的解决方法。 Windows 窗口管理器允许禁用的窗口变为事件窗口,这很奇怪。这并不经常进行测试,一个应用程序占用如此多的任务栏按钮是很不寻常的。

关于winforms - 当模态对话框处于事件状态时,防止任务栏激活非模态表单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3346885/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com