5
我想防止在任何對話框模態時激活我的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);
}
}
}
若要重現行爲,運行應用程序,打開兩個窗體2實例,然後從打開的二審模態對話框。然後使用任務欄激活第一個Form2實例,並將其顯示在模態對話框的上方。
更新:這個重複與WPF Windows也。
更新:從漢斯的反饋,這似乎是一個錯誤,我已經報告給connect.microsoft.com here。
感謝繁殖漢斯。是的,這將解決問題,但該應用程序旨在讓用戶打開數據表單,就像Outlook允許您打開電子郵件/約會/等。 – 2010-07-27 20:50:35
您可以嘗試connect.microsoft.com報告問題。他們認真對待它需要奇蹟。 – 2010-07-27 21:22:10