Di .NET, Formulir Windows memiliki peristiwa yang dijalankan sebelum Formulir dimuat (Form.Load), tetapi tidak ada peristiwa terkait yang diaktifkan SETELAH formulir dimuat. Saya ingin menjalankan beberapa logika setelah formulir dimuat.
Adakah yang bisa memberi nasihat tentang solusi?
Jawaban:
Anda dapat menggunakan acara "Shown": MSDN - Form.Shown
"Acara yang Ditampilkan hanya dimunculkan saat pertama kali formulir ditampilkan; kemudian meminimalkan, memaksimalkan, memulihkan, menyembunyikan, menampilkan, atau membatalkan dan mengecat ulang tidak akan meningkatkan acara ini."
sumber
Shown += Form1_Shown;
seperti yang disarankan di utas lainSaya terkadang menggunakan (di Load)
atau
(ubah "ini" ke variabel formulir Anda jika Anda menangani peristiwa pada instance selain "ini").
Ini mendorong pemanggilan ke loop bentuk jendela, sehingga diproses saat formulir memproses antrian pesan.
[diperbarui berdasarkan permintaan]
Metode Control.Invoke / Control.BeginInvoke dimaksudkan untuk digunakan dengan threading, dan merupakan mekanisme untuk mendorong pekerjaan ke thread UI. Biasanya ini digunakan oleh utas pekerja dll. Control.Invoke melakukan panggilan sinkron, di mana-karena Control.BeginInvoke melakukan panggilan asinkron.
Biasanya, ini akan digunakan sebagai:
Ini dilakukan dengan mendorong pesan ke antrian pesan windows; UI thread (di beberapa titik) membatalkan antrian pesan, memproses delegasi, dan memberi sinyal kepada pekerja bahwa itu telah diselesaikan ... sejauh ini sangat bagus ;-p
BAIK; jadi apa yang terjadi jika kita menggunakan Control.Invoke / Control.BeginInvoke pada UI thread? Ini mengatasi ... jika Anda memanggil Control.Invoke, cukup masuk akal untuk mengetahui bahwa pemblokiran pada antrian pesan akan menyebabkan kebuntuan langsung - jadi jika Anda sudah berada di thread UI, kode akan langsung menjalankannya ... tidak membantu kami ...
Tetapi Control.BeginInvoke bekerja secara berbeda: ia selalu mendorong pekerjaan ke antrian, meskipun kita sudah berada di thread UI. Ini membuat cara yang sangat sederhana untuk mengatakan "dalam sekejap", tetapi tanpa ketidaknyamanan pengatur waktu dll (yang tetap harus melakukan hal yang sama!).
sumber
Pertama kali TIDAK AKAN memulai "AfterLoading",
Ini hanya akan mendaftarkannya untuk memulai NEXT Load.
sumber
Saya memiliki masalah yang sama, dan menyelesaikannya sebagai berikut:
Sebenarnya saya ingin menampilkan Pesan dan menutupnya secara otomatis setelah 2 detik. Untuk itu saya harus menghasilkan form sederhana (dinamis) dan satu label yang menampilkan pesan, stop message selama 1500 ms sehingga user membacanya. Dan Tutup formulir yang dibuat secara dinamis. Acara yang ditampilkan terjadi setelah acara pemuatan. Jadi kodenya
sumber
Anda juga dapat mencoba meletakkan kode Anda di acara Activated dari formulir, jika Anda ingin itu terjadi, tepat ketika formulir diaktifkan. Anda harus memasukkan cek boolean "telah dieksekusi" meskipun jika itu hanya harus dijalankan pada aktivasi pertama.
sumber
Ini pertanyaan lama dan lebih bergantung pada kapan Anda perlu memulai rutinitas Anda. Karena tidak ada yang menginginkan pengecualian referensi null, yang terbaik adalah memeriksa null terlebih dahulu, lalu gunakan sesuai kebutuhan; Itu saja bisa menyelamatkan Anda dari banyak kesedihan.
Alasan paling umum untuk jenis pertanyaan ini adalah ketika wadah atau jenis kontrol kustom mencoba mengakses properti yang diinisialisasi di luar kelas kustom di mana properti tersebut belum diinisialisasi sehingga berpotensi menyebabkan nilai null terisi dan bahkan dapat menyebabkan pengecualian referensi null pada tipe objek. Ini berarti kelas Anda berjalan sebelum sepenuhnya diinisialisasi - sebelum Anda selesai menyetel properti Anda, dll. Alasan lain yang mungkin untuk jenis pertanyaan ini adalah kapan harus melakukan grafik kustom.
Untuk menjawab pertanyaan terbaik tentang kapan harus mulai menjalankan kode setelah peristiwa pemuatan formulir adalah dengan memantau pesan WM_Paint atau mengait langsung ke peristiwa cat itu sendiri. Mengapa? Peristiwa paint hanya diaktifkan ketika semua modul telah dimuat sepenuhnya sehubungan dengan peristiwa pemuatan formulir Anda. Catatan: This.visible == true tidak selalu benar jika diset true sehingga tidak digunakan sama sekali untuk tujuan ini kecuali untuk menyembunyikan formulir.
Berikut ini adalah contoh lengkap tentang cara mulai menjalankan kode Anda setelah peristiwa pemuatan formulir. Disarankan agar Anda tidak mengikat loop pesan paint secara tidak perlu sehingga kami akan membuat acara yang akan mulai mengeksekusi kode Anda di luar loop tersebut.
namespace MyProgramStartingPlaceExample {
}
sumber
Saya tahu ini adalah posting lama. Tapi inilah cara saya melakukannya:
sumber
Anda dapat menutup formulir Anda setelah beberapa eksekusi ..
//YourForm.ActiveForm.Close ();
sumber