2010-06-02 33 views
5

Tôi có một ứng dụng biểu mẫu C# windows. Cách tôi hiện có nó được thiết lập, khi Form1_Load() chạy nó kiểm tra dữ liệu chưa được khôi phục và nếu nó tìm thấy một số nó sẽ nhắc người dùng nếu họ muốn mở dữ liệu đó. Khi chương trình chạy nó hoạt động được nhưng hộp thông báo được hiển thị ngay lập tức và biểu mẫu chương trình chính (Form1) không hiển thị cho đến sau khi người dùng nhấp vào có hoặc không. Tôi muốn Form1 bật lên trước và sau đó là lời nhắc hộp tin nhắn.Cách tốt nhất để gọi phương thức ngay sau khi tải biểu mẫu là gì?

Bây giờ để giải quyết vấn đề này trước khi tạo bộ đếm thời gian trong Biểu mẫu, khởi động bộ đếm thời gian trong phương thức Form1_Load(), sau đó thực hiện kiểm tra và nhắc người dùng trong Sự kiện tính giờ đầu tiên. Kỹ thuật này giải quyết vấn đề nhưng dường như có thể có cách tốt hơn.

Các bạn có ý tưởng nào tốt hơn không?

Chỉnh sửa: Tôi nghĩ rằng tôi cũng đã sử dụng một nhân viên nền để làm điều gì đó tương tự. Nó chỉ có vẻ kinda ngốc nghếch để đi qua tất cả các rắc rối của cách gọi phương pháp để trở lại thread hình thức và tất cả những crap chỉ để có nó bị trì hoãn một vài mili giây!

+0

thẻ không phù hợp. bạn nên chọn "C#" "winforms". thẻ có nghĩa là danh mục câu hỏi. – Andrey

+0

Vâng tôi không chắc chắn nên sử dụng cái gì. Tôi đã sửa nó ngay bây giờ. Cảm ơn. – PICyourBrain

+1

Để tham khảo trong tương lai, liên kết này chứa danh sách thứ tự sự kiện khi hiển thị Biểu mẫu: http://msdn.microsoft.com/en-us/library/86faxx0d%28VS.80%29.aspx –

Trả lời

13

Tôi sẽ sử dụng Form1_Shown()

+1

Tuyệt vời. Tôi thậm chí không nhận ra rằng sự kiện Form_Shown tồn tại. Tôi có thể nói đó là một ngày tốt lành! – PICyourBrain

+0

Tôi không tin anh ấy đang đề xuất sự kiện này. Tôi nghĩ anh ta chỉ định đè lên phương thức OnShown()? – Ian

+0

Sự kiện hoặc ghi đè. Sự kiện, nếu bạn không thay đổi hành vi. Ghi đè, nếu bạn đang có. Trong bối cảnh của câu hỏi, tôi sẽ ghi đè lên. – AMissico

2
  • Sử dụng một Windows.Forms.Timer là một, ổn định, nổi tiếng, và dễ hiểu kỹ thuật tốt để làm những gì bạn muốn. Tôi sẽ tránh bất kỳ đối tượng bộ đếm thời gian nào khác.

  • Sự kiện Shown của biểu mẫu hoạt động tốt.

  • Quá tải/ghi đè phương pháp Show. (Kỹ thuật ưa thích của tôi để kiểm soát tốt hơn.) Trong phương pháp này, tôi sẽ thực hiện việc kiểm tra cần thiết. Khi đã sẵn sàng, tôi sẽ gọi phương thức base.Show, sau đó thực hiện bất kỳ quá trình xử lý nào khác, chẳng hạn như hộp tin nhắn, lời nhắc, ghi nhật ký hoặc bất kỳ điều gì.

+0

-1? Này, không công bằng. Tôi đang chỉnh sửa. Không thể một người "đăng" để "giả tiết kiệm"? – AMissico

+2

Cho rằng OP rõ ràng nói rằng anh ta muốn điều gì đó xảy ra ngay sau khi biểu mẫu được hiển thị trên màn hình, bạn không thể * nhận * phù hợp hơn form.Shown(). Bộ hẹn giờ rất khó khăn cho việc này: nếu thời gian không hoàn hảo (và nó có thể thay đổi trên các máy khác nhau) thì thông báo có thể hiển thị ở giữa hành động của người dùng khác. Và nếu bạn định sử dụng các sự kiện, tại sao lại sử dụng Show thay vì hiển thị? – Klay

+0

Tôi muốn kiểm soát. Hiển thị là sau. Hiển thị là trước.Chương trình cung cấp cho tôi khả năng hiển thị một biểu mẫu, thông báo, lời nhắc hoặc bất kỳ điều gì khác. Hiển thị là quá muộn. Tải quá sớm. – AMissico

5

Sử dụng các sự kiện Shown. Nó có vẻ phù hợp với những gì bạn cần, và sẽ chỉ hiển thị lần đầu tiên biểu mẫu được hiển thị.

Form f1 = new Form(); 
f1.Shown += new EventHandler(f1_Shown); 

public void f1_Shown(object sender, EventArgs e) 
{ 
    // Show dialog in here 
} 
+0

Điều đó thật sự tiện lợi! Cảm ơn bạn đã chia sẻ – Kryptic

+0

Tôi đang cố gắng sử dụng giải pháp của bạn có vẻ như GUI đã hoạt động nhưng nó không hiển thị bộ điều khiển cho đến khi nó kết thúc tác vụ trên sự kiện Hiển thị. Bất kỳ lời khuyên nào cho tôi? –

Các vấn đề liên quan