2011-09-04 31 views
98

Tôi có một hộp thoại phương thức và cần phải ẩ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.Biểu mẫu Windows: Cách ẩn nút Đóng (x)?

Tôi cần phải ẩn nút Đóng, có cách nào để thực hiện đ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 tính năng này, đơn giản hơn :) Cảm ơn tất cả!

+0

bạn là sai, tôi không muốn nút disable, nhưng ẨN nó .. là u có thể tìm thấy một giải pháp? –

+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ì mà người dùng không thể chấm dứt chương trình hoặc giao diện người dùng "có vẻ như nó không có nút đóng"? Vì có nhiều cách khác xung quanh vấn đề này và bạn sẽ khó có thể đóng hoàn toàn tất cả chúng (ví dụ: người quản lý tác vụ, nhiệm vụ, có thể là alt + f4, v.v.). Cá nhân tôi sẽ không làm việc quá chăm chỉ, bởi vì trừ khi bạn đang làm lại toàn bộ ứng dụng của bạn, nó sẽ bị lãng phí công sức, và phá vỡ kỳ vọng của người dùng/liên tục với các chương trình Windows khác. –

+4

@Sayem nó cho thấy trang này, do đó, không được như một nhà phê bình. –

Trả lời

110

Bạn không thể ẩn nó, nhưng bạn có thể tắt nó bằng cách ghi đè thuộc tính CreateParams 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

+0

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 thanks! –

+3

không có cách nào khác ngoài việc thiết kế biểu mẫu của bạn từ đầu) –

+0

vâng. controlbox mà không có nút đóng rồi ẩn hộp điều khiển của biểu mẫu gốc – Bahamut

25

Vâng, bạn có thể ẩn nó, bằng cách loại bỏ toàn bộ hệ thống menu:

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 xóa bỏ các nút minimize và maximize.

Nếu bạn giữ menu hệ thống nhưng xóa mục đóng thì nút đóng vẫn còn nhưng bị vô hiệu hóa.

Phương án cuối cùng là tự sơn khu vực phi khách hàng. Đó là khá khó khăn để có được quyền.

+1

Điều này làm việc quá, gr ăn! Nhưng * ControlBox = false * rất dễ sử dụng như cách của bạn. – simmeone

+0

Điều này giống như thiết lập 'Hộp điều khiển' thành sai. Ngoài ra, nó không đáp ứng được yêu cầu: _I cần giữ lại các nút Thu nhỏ và Tối đa hóa_ – whiteshooz

7

Nếu bạn thực sự muốn ẩn nó, như trong "không hiển thị", thì có thể bạn sẽ phải tạo một biểu mẫu không viền và tự vẽ các thành phần phụ đề. 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 lại kích thước biểu mẫu hoặc di chuyển biểu mẫu bằng cách lấy thanh phụ đề. Chưa kể đến menu hệ thống ở góc.

Trong hầu hết các trường hợp, rất khó để biện minh cho việc nút "đóng" không khả dụng, đặc biệt khi bạn muốn một biểu mẫu phương thức có khả năng giảm thiểu. Giảm thiểu một hình thức phương thức thực sự không có ý nghĩa.

106

Chúng tôi có thể ẩn nút đóng vào mẫu bằng cách thiết lập this.ControlBox=false;

+23

Bạn có đọc câu hỏi mà anh ta đã chỉ ra rằng đó không phải là một lựa chọn không? – Servy

+21

Đã thực hiện tìm kiếm trên 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 ... –

+11

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

1

Trong các thuộc tính của mẫu của bạn thiết lập 'Hộp điều khiển' = False nhưng nó sẽ ẩn Giảm thiểu và Tối đa hóa là tốt.

2

Vâng, bạn có thể ẩn các nút đóng bằng cách thay đổi FormBorderStyle từ phần tài sản hoặc lập trình trong các nhà xây dựng sử dụng:

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

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

cổ vũ

0

nếu điều này là một lựa chọn bạn có thể đặt

this.FormBorderStyle = FormBorderStyle.None; 

sau đó tái tạo các nút minimize và maximize

private void button1_Click(object sender, EventArgs e) 
    { 
     this.WindowState = FormWindowState.Maximized; 
    } 

    private void button2_Click(object sender, EventArgs e) 
    { 
     this.WindowState = FormWindowState.Minimized; 
    } 
Các vấn đề liên quan