当任何对话框是模态的时候,我想阻止在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);
}
}
}
Run Code Online (Sandbox Code Playgroud)
若要重现该行为,请运行该应用程序,打开两个Form2实例,然后从第二个实例打开一个模式对话框.然后使用任务栏激活第一个Form2实例,它出现在模式对话框上方.
更新:这个与WPF Windows的repros也是如此.
我重现,Win7。除了拥有这些表单以便它们不需要任务栏按钮之外,我没有看到明显的解决方法。Windows 窗口管理器允许禁用的窗口变为活动窗口,这很奇怪。这并不经常进行测试,一个应用程序占用如此多的任务栏按钮是很不寻常的。
| 归档时间: |
|
| 查看次数: |
625 次 |
| 最近记录: |