2009-05-24 19 views
7

Tôi đang sử dụng Microsoft Visual C# 2008 Express.Làm cách nào để thêm mã vào nút thoát trong biểu mẫu C#?

Trong biểu mẫu chính của tôi, có nút X để đóng biểu mẫu ở trên cùng bên phải. Làm cách nào để thêm mã vào nút này? Trong trình đơn của tôi, tôi có một mục "Thoát" và nó có mã làm sạch và đóng cơ sở dữ liệu của tôi. Làm thế nào để tôi thêm cùng một mã vào nút này nếu người dùng chọn đó như một cách để thoát?

Cảm ơn!

-Adeena

Trả lời

12

Sử dụng sự kiện FormClosing nên bắt mọi cách đóng biểu mẫu.

0

Sử dụng sự kiện đóng của biểu tượng thắng của bạn.

+0

là "FormClosed" hoặc "FormClosing" ? hoặc không quan trọng nếu tất cả những gì tôi đang làm là những thứ như đóng cơ sở dữ liệu ...? – adeena

+0

Xin lỗi, lỗi chính tả: Tôi có nghĩa là Sự kiện đã đóng. Nhưng tôi chỉ đọc rằng nó được thay thế bởi FormClosed-Event từ .NET 2.0 updwards –

7

Trong dạng xem thiết kế cho biểu mẫu của bạn, trong cửa sổ thuộc tính, hãy chọn nút sự kiện và cuộn xuống các sự kiện "FormClosed" và "FormClosing".

FormClosed được gọi sau khi biểu mẫu được đóng lại.

FormClosing được gọi trước khi form được đóng lại và cũng cho phép bạn hủy gần, giữ dưới dạng mở:

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

FormClosing/FormClosed cho phép bạn xem các sự kiện cho hình thức mà trong đó có thể trùng với các ứng dụng thoát. Tuy nhiên, có một sự kiện khác mà bạn có thể gọi là Application.ApplicationExit.

Trong phương pháp chính của bạn:

Application.ApplicationExit += Application_ApplicationExit; 

... 

private static void Application_ApplicationExit(object sender, EventArgs e) { 

    // do stuff when the application is truly exiting, regardless of the reason 

} 
0

Mã này sẽ nắm bắt được người dùng nhấp vào 'X' hoặc sử dụng Alt-F4 trên một hình thức để cho phép bạn làm điều gì đó. Tôi đã phải sử dụng điều này bởi vì tôi cần hành động để gọi sự kiện kết thúc của tôi, và nó sẽ không gọi nó khi sử dụng sự kiện FormClosing do các sự kiện đua xe.

/// <summary> 
/// This code captures the 'Alt-F4' and the click to the 'X' on the ControlBox 
/// and forces it to call MyClose() instead of Application.Exit() as it would have. 
/// This fixes issues where the threads will stay alive after the application exits. 
/// </summary> 
public const int SC_CLOSE = 0xF060; 
public const int WM_SYSCOMMAND = 0x0112; 
protected override void WndProc(ref System.Windows.Forms.Message m) 
{ 
    if (m.Msg == WM_SYSCOMMAND && (int)m.WParam == SC_CLOSE) 
     MyClose(); 

    base.WndProc(ref m); 
} 
1

Nếu bạn muốn hỏi người dùng "Bạn có chắc chắn bạn muốn làm gần mẫu đơn này?", Sau đó sử dụng FormClosing, nơi bạn có thể đặt Cancel = True và hình thức sẽ vẫn mở.

Nếu bạn muốn đóng một số tài nguyên chỉ khi biểu mẫu được đóng hoàn toàn, thì bạn sử dụng sự kiện FormClosed.

Nếu bạn kiểm soát toàn bộ mã, thì việc đó không thành vấn đề. Nhưng những gì bạn không muốn xảy ra là dọn sạch tài nguyên bằng cách sử dụng FormClosing khi người xử lý khác của sự kiện sẽ giữ biểu mẫu mở.

0

nhấn đúp chuột vào nút thoát trong form'design sau đó chỉ cần gọi phương thức Dispose()

0

phương pháp hành động Mẫu //

protected override void OnFormClosing(FormClosingEventArgs e) 

      { 
      base.OnFormClosing(e); 

      if (e.CloseReason == CloseReason.WindowsShutDown) return; 

       switch (MessageBox.Show(this, "Are you sure you want to exit?", "Exit", MessageBoxButtons.YesNo)) 
        { 
         case DialogResult.No: 
          e.Cancel = true; 
          break; 
        default: 
          break; 
        } 
     } 
0
You can use form closing events choose or set closing event in properties window  
You can add dialog conditions based on what task you want to perform before closing form 

private void Form1_FormClosing(object sender,FormClosingEventArgs e) 
{ 
Application.Exit(); 
//you can also use Application.ExitThread(); 
} 
Các vấn đề liên quan