2010-02-01 36 views
6

Làm cách nào để ngăn nhiều biểu mẫu mở?Ngăn chặn nhiều mẫu biểu mẫu

Tôi thực hiện .show trên biểu mẫu nhưng người dùng có thể nhấp vào biểu mẫu chính và nút một lần nữa và một phiên bản biểu mẫu khác mở ra.

Trả lời

2

Hai tùy chọn, tùy thuộc vào những gì bạn cần:

  1. Sử dụng ShowDialog thay vì Show, mà sẽ mở một cửa sổ phương thức. Đây là giải pháp hiển nhiên nếu bạn không cần hình thức chính của mình để hoạt động khi biểu mẫu con đang mở.

  2. Hoặc theo dõi cửa sổ bạn đã mở trong biểu mẫu chính và không phải làm gì nếu cửa sổ đã mở. Điều này sẽ cần thiết nếu bạn muốn người dùng có thể sử dụng biểu mẫu chính trong khi biểu mẫu con đã mở, có thể mở các biểu mẫu khác.

0

Tắt biểu mẫu chính cho đến khi biểu mẫu con biến mất hoặc vô hiệu hóa nút.

button_onClick(object Sender, EventArgs e) 
{ 
    Button btn = sender as Button; 
    btn.Enabled = false; 
    Form myform = new MyForm(); 
    myform.Show(); 
} 

Tất nhiên, bạn thực sự nên sử dụng form.ShowDialog() hơn form.Show() nếu bạn muốn hành vi phương thức.

2

làm một cái gì đó như:

SingleForm myform = null; 

void ShowMyForm_Click(object sender, EventArgs e) 
{  if (myform == null) 
     { 
      myform = new SingleForm(); 
     } 
     myform.Show(); 
     myform.BringToFront(); 
} 
+0

điều này là tốt hơn, nhưng nó không ngăn người dùng vô tình hoặc cố ý đưa biểu mẫu chính lên phía trước một lần nữa. –

+0

anh ấy không nói rằng biểu mẫu chính phải ở lại nền sau ... anh ấy chỉ không muốn người dùng có thể mở một biểu mẫu khác khi nút được nhấp ...;) Nhưng thx để chỉnh sửa. .. oh ... Tôi đã hiểu sai. Tôi đã nghĩ rằng có hình thức thứ hai đã được mở ra khi một nút bấm ... idk – IAbstract

+0

Tôi sẽ thêm .ShowDialog() như là một lựa chọn khác nhưng John K. & Johannes đánh bại tôi với nó – IAbstract

1

Force đối tượng mẫu của bạn phải tuân theo mô hình singleton

0

Tôi thích sử dụng Generics và lười tải để xử lý các hình thức của tôi. Vì tất cả các biểu mẫu của tôi được kế thừa từ một lớp cơ sở, tôi có thể sử dụng cùng một phương thức để đưa biểu mẫu lên phía trước, gửi chúng về phía sau, tiêu diệt chúng, bắt đầu, v.v.

Nếu bạn giữ một lớp người quản lý biểu mẫu chịu trách nhiệm quản lý bất kỳ biểu mẫu đã tải nào, bạn có thể mang bất kỳ biểu mẫu nào lên phía trước mà bạn muốn hoặc ngăn các biểu mẫu cụ thể không thể quay lại trừ khi các tiêu chí nhất định được đáp ứng.

public void LoadForm<T>() where T : MyNameSpace.MyBaseForm 
{ 
    // Load all your code in this joint and just call it when you 
    // need a form. In here, you can determine if a copy of the form 
    // already exists and then bring it forward or not 
} 
Các vấn đề liên quan