2012-09-14 21 views
7

Làm cách nào để tắt nút đóng của biểu mẫu như trong hình dưới đây? (Hình ảnh dưới đây cho thấy một cửa sổ MessageBox)Tôi có thể tắt nút 'đóng' của biểu mẫu bằng C# không?

enter image description here

Các MessageBox trên được tạo ra bởi tôi! Tôi muốn vô hiệu hóa nút đóng của một biểu mẫu bình thường.

+0

Tôi không thể xem hình ảnh? :(:( –

+2

Bạn có lẽ không nên, chỉ cần xử lý nó giống như "Không", bạn có thể tạo cửa sổ pop-up của riêng bạn và thiết kế nó, tuy nhiên bạn thích – musefan

+0

'X' bằng 'Không' trong xác nhận. người dùng nhấp vào đó, anh ấy/cô ấy không biết phải trả lời gì, vì vậy bạn * phải * để họ quyết định mà không cần chạm vào bất cứ thứ gì. – Alex

Trả lời

9

Bạn xử lý Đóng sự kiện (chứ không phải sự kiện Đóng) của Biểu mẫu.

Và sau đó bạn sử dụng e.CloseReason để quyết định xem bạn có thực sự muốn chặn nó (UserClose) hay không (TaskManager Close).

Ngoài ra, có một ví dụ nhỏ Disabling Close Button on Forms trên codeproject.

3

Bạn nên ghi đè CreateParams chức năng có nguồn gốc từ System.Windows.Forms.Form

Và thay đổi Style Lớp

myCp.ClassStyle = 0x200; 
12

Nhấp chuột phải vào cửa sổ trong câu hỏi, sau đó nhấp vào Thuộc tính. Dưới Thuộc tính, nhấp vào Sự kiện. Nhấp đúp vào sự kiện FormClosing.

Đoạn mã dưới đây sẽ được tạo ra bởi Windows Form Designer:

private void myWindow_FormClosing(object sender, FormClosingEventArgs e) 
{ 

} 

Đơn giản chỉ cần cập nhật mã trông như thế này (thêm e.Cancel = true;):

private void myWindow_FormClosing(object sender, FormClosingEventArgs e) 
{ 
    e.Cancel = true; 
} 

Bạn đã hoàn tất!

Ngoài ra, nếu bạn muốn vô hiệu hóa chặt chẽ, phát huy tối đa và giảm thiểu các nút của cửa sổ:

Bạn có thể kích chuột phải vào cửa sổ trong câu hỏi, sau đó nhấp vào Thuộc tính. Trong Thuộc tính, đặt thuộc tính ControlBox thành false.

+0

Đây chính xác là những gì tôi đã làm sau! có tối thiểu kinh nghiệm winform (trước đây asp.net chỉ) này đã giúp! cảm ơn! – Ric

7

Nếu bạn đang làm việc với cửa sổ con MDI và vô hiệu hóa nút đóng trong khi tạo cửa sổ sẽ bị loại trừ (tức là bạn muốn vô hiệu hóa nó vào những thời điểm nhất định trong suốt thời gian của biểu mẫu), không có giải pháp nào được đề xuất trước đây hoạt động¹.

Thay vào đó chúng ta phải sử dụng đoạn mã sau:

[DllImport("user32")] 
public static extern IntPtr GetSystemMenu(IntPtr hWnd, bool bRevert); 

[DllImport("user32")] 
public static extern bool EnableMenuItem(IntPtr hMenu, uint itemId, uint uEnable); 

public static void DisableCloseButton(this Form form) 
{ 
    // The 1 parameter means to gray out. 0xF060 is SC_CLOSE. 
    EnableMenuItem(GetSystemMenu(form.Handle, false), 0xF060, 1); 
} 

public static void EnableCloseButton(this Form form) 
{ 
    // The zero parameter means to enable. 0xF060 is SC_CLOSE. 
    EnableMenuItem(GetSystemMenu(form.Handle, false), 0xF060, 0); 
} 

¹ Bạn có thể đặt ControlBox = false nếu bạn không muốn bất kỳ nút, nhưng đó không phải là những gì các câu hỏi được hỏi.

0
Closing += (s, eventArgs) => 
     { 
      DialogResult = DialogResult.None; //means that dialog would continue running 
     }; 
Các vấn đề liên quan