2010-07-27 32 views
5

Tôi muốn ngăn chặn kích hoạt tất cả các biểu mẫu khác trong ứng dụng biểu mẫu winforms khi bất kỳ hộp thoại nào là phương thức. Đây là cách Outlook hoạt động - mở hai thư mới, mở sổ địa chỉ từ một thư và bạn không thể kích hoạt thư khác bằng cách sử dụng thanh tác vụ hoặc bằng cách bấm vào cửa sổ thư. Làm thế nào tôi có thể làm điều này trong một ứng dụng winforms (lưu ý rằng thiết lập quyền sở hữu không hoạt động)?Ngăn chặn thanh tác vụ kích hoạt các dạng không phương thức khi hộp thoại phương thức hoạt động

Ứng dụng mẫu bên dưới.

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

Để tái tạo hành vi, chạy ứng dụng, mở hai phiên bản Form2 và sau đó mở hộp thoại phương thức từ thể hiện thứ hai. Sau đó, sử dụng thanh tác vụ để kích hoạt cá thể Form2 đầu tiên và nó xuất hiện phía trên hộp thoại phương thức.

Cập nhật: bản repros này với WPF Windows.

Cập nhật: Từ phản hồi của Hans, đây dường như là lỗi và tôi đã báo cáo điều này để kết nối.microsoft.com here.

Trả lời

2

Tôi repro, Win7. Tôi không nhìn thấy một cách giải quyết rõ ràng cho nó ngoài việc làm cho các hình thức sở hữu để họ không cần một nút thanh tác vụ. Trình quản lý cửa sổ Windows cho phép các cửa sổ bị vô hiệu hóa hoạt động khá lạ. Điều này không được đưa vào kiểm tra thường xuyên, rất khác thường khi có một ứng dụng thực hiện rất nhiều nút trên thanh tác vụ.

+0

Cảm ơn bạn đã repro Hans. Vâng, điều đó sẽ giải quyết vấn đề, nhưng ứng dụng được thiết kế để cho phép người dùng mở các biểu mẫu dữ liệu giống như Outlook cho phép bạn mở email/cuộc hẹn/v.v. –

+0

Bạn có thể thử connect.microsoft.com để báo cáo sự cố. Họ lấy nó nghiêm trọng sẽ yêu cầu một phép lạ mặc dù. –

Các vấn đề liên quan