Làm cách nào để chỉ ẩn nút Đóng (x)?


151

Tôi có một hộp thoại phương thức và cần ẩn nút Đóng (X), nhưng tôi không thể sử dụng ControlBox = false, vì tôi cần giữ các nút Thu nhỏ và Tối đa hóa.

Tôi chỉ cần ẩn nút Đóng, có cách nào để làm điều đó không?

Cảm ơn rất nhiều!

Cập nhật: Tôi đã có quyền vô hiệu hóa nó, đơn giản hơn :) Cảm ơn tất cả!


Đây có thể là những gì yuo muốn: [Ẩn nút Đóng [X] của Win Forms trong C # .NET] ( sameeramrutia.wordpress.com/2008/09/16/ trên ) chỉ cần googled : hide close button c#, kết quả thứ hai ở đây! =)
Miguel Angelo

bạn đã sai, tôi không muốn tắt nút, nhưng ẩn nó .. bạn có thể tìm ra giải pháp không?
stefano m

8
Cần là một từ mạnh mẽ. Yêu cầu này đến từ đâu? Yêu cầu thực tế là gì - rằng người dùng không thể chấm dứt chương trình hay UI "có vẻ như nó không có nút đóng"? Bởi vì có nhiều cách khác xung quanh vấn đề này và bạn sẽ khó có thể tắt hoàn toàn tất cả chúng (ví dụ: trình quản lý tác vụ, tác vụ, có thể là alt + f4, v.v.). Cá nhân tôi sẽ không làm việc quá sức với điều này, bởi vì trừ khi bạn làm lại toàn bộ ứng dụng của mình bằng mọi cách, nó sẽ bị lãng phí công sức và phá vỡ sự mong đợi / liên tục của người dùng với các chương trình Windows khác.
Merlyn Morgan-Graham

4
@Sayem nó tiết lộ trang này, vì vậy đừng là một nhà phê bình như vậy.
Brian Graham

1
Cào nút thu nhỏ ra khỏi danh sách của bạn là tốt. Giảm thiểu một hộp thoại phương thức sẽ tự động đóng nó. Nhất thiết phải như vậy, đó là cửa sổ duy nhất còn lại vẫn được bật. Khi bạn thu nhỏ nó, sẽ không còn cửa sổ nào còn có thể lấy nét để người dùng không thể quay lại chương trình của bạn. Bây giờ bạn đang ở "điều này vẫn còn có ý nghĩa?" lãnh thổ. Nó không.
Hans Passant

Câu trả lời:


148

Bạn không thể ẩn nó, nhưng bạn có thể vô hiệu hóa nó bằng cách ghi đè thuộc tính CreatParams của biểu mẫu.

private const int CP_NOCLOSE_BUTTON = 0x200;
protected override CreateParams CreateParams
{
    get
    {
       CreateParams myCp = base.CreateParams;
       myCp.ClassStyle = myCp.ClassStyle | CP_NOCLOSE_BUTTON ;
       return myCp;
    }
}

Nguồn: http://www.codeproject.com/KB/cs/DisableClose.aspx


cảm ơn, tôi đã tìm thấy giải pháp này, nhưng chúng tôi muốn ẩn nó, không chỉ vô hiệu hóa :( anywat cảm ơn!
stefano m

4
không có cách nào khác ngoài thiết kế biểu mẫu của bạn từ đầu.
Daniel A. White

vâng tốt hơn là tạo biểu mẫu của riêng bạn bằng hộp điều khiển của riêng bạn mà không cần nút đóng, sau đó ẩn hộp điều khiển của biểu mẫu mẹ.
Bahamut

Trả lời từ 'Abhishek.Chopra' rất đơn giản và hiệu quả.
Altaf Patel

Làm thế nào để kích hoạt nó trong thời gian chạy lại?
Mike de Klerk

158

Chúng ta có thể ẩn nút đóng trên biểu mẫu bằng cách cài đặt this.ControlBox=false;


29
Bạn đã đọc câu hỏi mà anh ấy chỉ định rằng đó không phải là một lựa chọn?
Phục vụ

28
Đã tìm kiếm Google và SO QA này là hit hàng đầu. Và câu trả lời này là những gì tôi đang tìm kiếm. Cảm ơn bạn Abhishek ...
Abel Gaxiola

15
Điều đó ẩn tất cả các nút kích thước. Không chỉ X.
Rich Shealer

1
Cảm ơn bạn rất nhiều! Cách dễ nhất.

26

Chà, bạn có thể ẩn nó, bằng cách xóa toàn bộ menu hệ thống:

private const int WS_SYSMENU = 0x80000;
protected override CreateParams CreateParams
{
    get
    {
        CreateParams cp = base.CreateParams;
        cp.Style &= ~WS_SYSMENU;
        return cp;
    }
}

Tất nhiên, làm như vậy sẽ loại bỏ các nút thu nhỏ và tối đa hóa.

Nếu bạn giữ menu hệ thống nhưng loại bỏ mục đóng thì nút đóng vẫn còn nhưng bị tắt.

Thay thế cuối cùng là tự sơn khu vực không có khách hàng. Điều đó khá khó để có được đúng.


4
Điều này làm việc quá, tuyệt vời! Nhưng ControlBox = false rất dễ sử dụng theo cách của bạn.
simmeone

1
Điều này giống như cài đặt ControlBoxthành false. Ngoài ra, nó không đạt yêu cầu: Tôi cần giữ các nút Thu nhỏ và Tối đa hóa
whiteshooz

23

bạn có thể ẩn hộp gần bằng cách sử dụng

this.ControlBox = false;

và đừng quên thêm khoảng trắng this.Text = " "để làm cho nó như thế này

nhập mô tả hình ảnh ở đây


2
Đây là những gì tôi cần. Cảm ơn.
Kosmas

2
Điều này LAF không đúng. Trực tiếp từ câu hỏi của OP: Tôi không thể sử dụngControlBox = false
Martin

8

Nếu bạn thực sự muốn ẩn nó, như trong "không nhìn thấy", thì có lẽ bạn sẽ phải tạo một hình thức không biên giới và tự vẽ các thành phần chú thích. Thư viện VisualStyles có sẵn Windows Elements. Bạn cũng sẽ phải thêm lại chức năng định cỡ lại biểu mẫu hoặc di chuyển biểu mẫu bằng cách lấy thanh chú thích. Chưa kể menu hệ thống ở góc.

Trong hầu hết các trường hợp, thật khó để biện minh rằng không có nút "đóng", đặc biệt là khi bạn muốn một hình thức phương thức với khả năng tối thiểu hóa. Tối thiểu hóa một hình thức phương thức thực sự không có ý nghĩa.


2

Trong thuộc tính của biểu mẫu của bạn, đặt 'Hộp điều khiển' = Sai nhưng nó cũng sẽ ẩn Tối thiểu hóa và Tối đa hóa.


1

Vâng, bạn có thể ẩn nút đóng bằng cách thay đổi FormBorderStyle khỏi phần thuộc tính hoặc lập trình trong hàm tạo bằng cách sử dụng:

public Form1()
{
InitializeComponent();
this.FormBorderStyle = FormBorderStyle.None;
}

sau đó bạn tạo một mục dải menu để thoát khỏi ứng dụng.

chúc mừng

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.