2010-06-18 20 views
39

Sự khác biệt giữa các hình thức Form.Load, Form.ShownForm.Activated sự kiện là gì? Thứ tự mà chúng bị sa thải là gì?Đặt hàng các sự kiện 'Form.Load', 'Form.Shown' và 'Form.Activated' trong Windows Forms

+24

KHÔNG BAO GIỜ , EVER, EVER COUNT TRÊN ĐẶT HÀNG CỦA SỰ KIỆN TRONG WINFORMS! Trên thực tế, hãy sử dụng ít sự kiện nếu có thể và nếu/khi bạn sử dụng nhiều sự kiện, họ chỉ nên gọi một vài người dùng chung làm hầu hết công việc. Đúng vậy, thứ tự của các sự kiện sẽ không thay đổi, nhưng phong cách lập trình đó là yêu cầu lỗi (nói từ kinh nghiệm của tôi và không may chủ yếu là của người khác). Và không bao giờ hét lên trong một bình luận StackOverflow, một trong hai! – FastAl

+17

@Anthony: MessageBox là một cách tuyệt vời để gây rối trật tự sự kiện. Nó sẽ làm cho sự kiện Hiển thị chạy * trước * sự kiện Tải kết thúc. Không bao giờ gỡ lỗi các sự kiện UI với MessageBox, Debug.WriteLine() là tốt nhất. –

+2

Tôi đã sử dụng Debug.WriteLine - cảm ơn Hans :) trong sự kiện Tải, Hiển thị và Kích hoạt. Cửa sổ đầu ra hiển thị chuỗi các sự kiện dưới dạng Tải, Kích hoạt và cuối cùng Hiển thị. – Ananth

Trả lời

12

Hơn nữa, Form.Activate sự kiện có thể được kích hoạt nhiều lần. Ví dụ: nếu bạn mở một hộp thư từ biểu mẫu của mình và khi bạn nhấp vào nút bất kỳ của hộp thư và quay lại biểu mẫu, Form.Activate sẽ được kích hoạt. Điều này cũng đúng đối với bất kỳ hộp thoại nào khác như FileOpenDialog.

+0

Ngoài ra: Chưa thực sự thử nghiệm điều này trong. Net để chắc chắn nếu nó hoạt động như nhau, nhưng tôi biết trong vb6 rằng nếu bạn đang bước qua mã một dòng tại một thời điểm, nó sẽ nhấn sự kiện tải mẫu, nhưng không sự kiện kích hoạt có thể gây hiểu lầm khi bạn không hiểu tại sao. –

+1

Sự kiện kích hoạt có tạo ra một cá thể mới của biểu mẫu không? –

3

Trình tự sẽ Form.Load, khởi tạo các hình thức và kêu gọi các điều khiển, Form.Shown, đánh dấu khung như nhìn thấy được (ngay cả trong C++, điều này được thực hiện sau khi các hình thức được tạo ra), và Form.Activated, mang đến cho trọng tâm diễn đàn .

+4

Điều này không đúng .. Tôi đã sử dụng Debug.WriteLine - Cửa sổ đầu ra hiển thị chuỗi sự kiện dưới dạng Tải, Kích hoạt và cuối cùng Hiển thị. – Ananth

+0

Bạn có ý gì khi gọi "kiểm soát"? –

60

Xem Windows Forms Events Lifecycle:

  • Move: Sự kiện này xảy ra khi các hình thức được di chuyển. Mặc dù theo mặc định, khi biểu mẫu được khởi tạo và khởi chạy, người dùng không di chuyển nó, nhưng sự kiện này được kích hoạt trước khi sự kiện Tải xảy ra.
  • Tải: Sự kiện này xảy ra trước khi biểu mẫu được hiển thị lần đầu tiên.
  • Có thể nhìn thấyThay đổi: Sự kiện này xảy ra khi giá trị thuộc tính Hiển thị thay đổi.
  • Đã kích hoạt: Sự kiện này xảy ra khi biểu mẫu được kích hoạt bằng mã hoặc bởi người dùng.
  • Được hiển thị: Sự kiện này xảy ra bất cứ khi nào biểu mẫu được hiển thị lần đầu tiên.
  • Sơn: Sự kiện này xảy ra khi điều khiển được vẽ lại.
  • Tắt: Sự kiện này xảy ra khi biểu mẫu mất tiêu điểm và không phải là biểu mẫu đang hoạt động.
  • Kết thúc: Sự kiện này xảy ra khi biểu mẫu đóng.
  • Đã đóng: Sự kiện này xảy ra khi biểu mẫu đang bị đóng.
+7

Đây là liên kết MSDN cho [Thứ tự sự kiện trong Windows Forms] (http://msdn.microsoft.com/en-us/library/86faxx0d.aspx). – Jeremy

+1

Sự kiện kích hoạt có tạo ra một phiên bản mới của biểu mẫu không? –

19
  • Các Load cháy sự kiện khi biểu mẫu đã được khởi tạo, sau khi xử lý của nó đã được tạo ra nhưng trước khi nó được hiển thị.

  • Sự kiện Shown kích hoạt sau lần đầu tiên biểu mẫu hiển thị khi bạn gọi form.Show() (hoặc form.Visible = true).
    Nếu bạn ẩn biểu mẫu của mình, hãy hiển thị lại, Shown sẽ kích hoạt lại. (Nhưng Load sẽ không)

  • Sự kiện Activate sẽ kích hoạt khi người dùng chuyển sang biểu mẫu của bạn.
    Nếu người dùng chuyển sang một chương trình khác (hoặc biểu mẫu), sau đó chuyển về biểu mẫu của bạn, Activate sẽ kích hoạt lại.

+4

Điều này không chính xác, Chỉ hiển thị một lần. –

+2

@Hans: Sai. Tôi vừa thử nó. Nếu bạn gọi 'ShowDialog' hai lần,' Hiển thị' sẽ nháy hai lần. – SLaks

+2

Hmm, không chắc bạn đang làm gì. Tải lửa hai lần. Không vứt bỏ một hộp thoại thường là một lỗi. –

6

Các lớp Biểu mẫu và Kiểm soát hiển thị một tập hợp các sự kiện liên quan đến khởi động và tắt ứng dụng.Khi một Windows Forms bắt đầu ứng dụng, sự kiện khởi động của hình thức chính được nâng lên theo thứ tự sau đây:

Control.HandleCreated 
Control.BindingContextChanged 
Form.Load 
Control.VisibleChanged 
Form.Activated 
Form.Shown 

Khi một ứng dụng đóng lại, các sự kiện tắt máy có dạng chính được nâng lên theo thứ tự sau:

Form.Closing 
Form.FormClosing 
Form.Closed 
Form.FormClosed 
Form.Deactivate 

Focus và Xác Nhận sự kiện

Khi bạn thay đổi sự tập trung bằng cách sử dụng tổ hợp phím (TAB, SHIFT + TAB, và vân vân), bằng cách gọi phương pháp Chọn hoặc SelectNextControl, hoặc bằng cách thiết lập thuộc tính ActiveControl đến hiện tại hình thức, sự kiện tập trung của Công ty lớp ntrol xảy ra theo trình tự sau:

Enter 
GotFocus 
Leave 
Validating 
Validated 
LostFocus 

Khi bạn thay đổi trọng tâm bằng chuột hoặc bằng cách gọi phương pháp Focus, tập trung các sự kiện của lớp kiểm soát xảy ra theo trình tự sau:

Enter 
GotFocus 
LostFocus 
Leave 
Validating 
Validated 
Các vấn đề liên quan