2011-02-04 43 views
8

Tôi có 2 biểu mẫu ... khi tôi khởi động ứng dụng..và sử dụng dấu "X" từ thanh tiêu đề, toàn bộ ứng dụng đóng ... bây giờ khi tôi chọn một tùy chọn từ biểu mẫu 1 trong trường hợp của tôi nó là một nút "ADD" như là một ứng dụng danh bạ .. nó đi đến hình thức thứ 2 như tôi đã sử dụng 1stform.hide() và 2ndform.show() ... bây giờ khi tôi làm "X" từ tiêu đề thanh nó không tắt hoàn toàn như 1form không đóng cửa .... làm thế nào để chương trình nó theo cách như vậy tht bất kỳ giai đoạn toàn bộ ứng dụng nên đóngĐể đóng ứng dụng C# Forms

+0

bởi "Ở bất kỳ giai đoạn nào" bạn có ý nghĩa dưới mọi hình thức không ?? –

+0

yes..Từ bất kỳ biểu mẫu nào ... chỉ có 3 trong trường hợp của tôi –

Trả lời

11

Biểu mẫu đầu tiên của bạn được đặt làm biểu mẫu khởi động. Điều đó có nghĩa là bất cứ khi nào nó được đóng lại, toàn bộ ứng dụng của bạn sẽ bị đóng. Và ngược lại, đơn đăng ký của bạn không đóng cho đến nó sẽ bị đóng. Vì vậy, khi bạn ẩn biểu mẫu khởi động và hiển thị biểu mẫu thứ hai, người dùng đóng biểu mẫu thứ hai không kích hoạt đóng ứng dụng của bạn vì họ chỉ đóng một hộp thoại phụ, không theo phương thức.

Tôi khuyên bạn nên thay đổi thiết kế của mình để biểu mẫu khởi động cũng là dạng chính của ứng dụng của bạn. Không có ý nghĩa cố gắng để làm việc xung quanh chức năng được xây dựng trong đó thực sự có thể hữu ích. Bạn muốn ứng dụng thoát khi biểu mẫu chính bị đóng, bất kể các biểu mẫu con khác được mở ra.

Nhưng giải pháp nhanh chóng và bẩn trong trường hợp của bạn là thực hiện cuộc gọi đến Application.Exit. Điều đó sẽ đóng tất cả các biểu mẫu hiện đang mở và thoát khỏi ứng dụng của bạn ngay lập tức. Như tôi đã nói ở trên, tôi không đề nghị cách tiếp cận này vì phải gọi Application.Exit từ mọi hình thức xử lý sự kiện của FormClosed là một dấu hiệu cho thấy có điều gì đó đã nghiêm trọng sai trong thiết kế của bạn.

Nếu mô hình mẫu đơn khởi động không hoạt động cho bạn, bạn nên xem xét việc đưa vấn đề vào tay mình và tùy chỉnh phương thức Main trong tệp nguồn Program.cs của bạn. Xem các câu trả lời được cung cấp cho this related question để biết một số ý tưởng về cách có thể phù hợp với bạn.

+0

+1: Câu trả lời hay! –

+0

CloseEvent là gì ?? .... Tôi có phải viết nó không ?? –

+0

@Vinod: Tôi có nghĩa là sự kiện 'FormClosed'. Các tài liệu có sẵn [ở đây] (http://msdn.microsoft.com/en-us/library/system.windows.forms.form.formclosed.aspx), nhưng nó chỉ là một sự kiện thường xuyên được trưng ra bởi lớp 'Form' . Bạn có thể đăng ký nó giống như bất kỳ sự kiện nào khác trong ứng dụng của bạn (ví dụ: 'Button.Click'). –

5

Điều bạn có thể làm là sử dụng sự kiện của Form FormClosing và thêm đoạn mã sau:

Application.Exit(); 

Điều này sẽ dừng toàn bộ ứng dụng và đóng tất cả các cửa sổ. Tuy nhiên, nếu một chuỗi nền đang chạy, quá trình tự nó sẽ tồn tại. Trong trường hợp này bạn có thể sử dụng:

Environment.Exit(); 
+0

Chủ đề nền không ngăn quá trình thoát khỏi vì nó tự động tắt.Có thể bạn đang đề cập đến một chuỗi tiền cảnh. –

+0

@ João Angelo - Điều tôi muốn nói ở đây là nếu một số luồng đang chạy, chỉ có luồng GUI sẽ bị gỡ xuống và ứng dụng dường như đã bị đóng, nhưng quá trình vẫn còn trong danh sách quy trình. Cảm ơn bạn đã chỉ ra :) –

2

Thêm một Application.Exit trên tất cả các hình thức của sự kiện bế mạc

như thế này:

Tạo một event handler đóng cửa đầu tiên

private void Form_ClosingEventhandler()(object sender, CancelEventArgs e) 
{ 
     //Perform any processing if required like saving user settings or cleaning resources 
     Application.Exit(); 
} 

sau đó ràng buộc sự kiện này cho bất kỳ biểu mẫu nào bạn tạo.

//Where you create new form and show it. 
Form1 frm= new Form1(); 
//set other properties 
frm.Closing += new EventHandler(Form_ClosingEventhandler); 
Form2 frm2= new Form2(); 
//set other properties 
frm2.Closing += new EventHandler(Form_ClosingEventhandler); 
+1

đã làm việc cho tôi cảm ơn! +1 – Vbp

1

Chắc chắn bạn không muốn tắt toàn bộ ứng dụng sau khi người dùng thêm số điện thoại? Bạn chỉ cần đảm bảo rằng cửa sổ chính của bạn sẽ hiển thị trở lại. Viết như thế này:

private void AddButton_Click(object sender, EventArgs e) { 
     var frm = new AddPhoneNumber(); 
     frm.StartPosition = FormStartPosition.Manual; 
     frm.Location = this.Location; 
     frm.Size = this.Size; // optional 
     frm.FormClosing += delegate { this.Show(); }; 
     frm.Show(); 
     this.Hide(); 
    } 
Các vấn đề liên quan