2010-04-12 13 views

cevap

16

Oluşturucudaki kod, formu oluşturduğunuzda, görüntülediğinizde veya göstermediğinizde hemen çalışır. Form.Load olayında çalışan kod bir olay işleyicisidir, bu nedenle aslında orada kod çalıştıran diğer sınıflarda kod çalıştırabilirsiniz. Benzer şekilde, kodu (formdan) kodu çalıştırmak için Form.OnLoad method kullanabilirsiniz.

Formun Load olayı (ve formun kendisinde daha iyi bir seçim olan OnLoad overridable yöntemi), form başlatıldıktan sonra çalışır. Bu genellikle avantajlara sahiptir, çünkü tüm form kontrolleri önceden yapılmış ve daha da önemlisi, tüm form düzeni gerçekleşmiştir.

+0

Her şeyden bir şey: 1- Ne sıklıkla bunu gösteren bir form inşa edersiniz? (Bağımlılıklarınız gecikmeli instansiasyon ile uygun şekilde enjekte edilirse), 2- Aşağıda @Hans tarafından belirtildiği gibi, bu noktada herhangi bir kontrol başlatma için bir performans cezasına maruz kalırsınız. Bc, düzeniniz askıya alınmaz, böylece formdaki tüm kontroller yanıt vermeye çalışır. başlatılırken olayları yeniden boyamak gibi şeylere. 3- Kendi kodumu aramak için OnLoad kullanmazdım; bunun yerine MyAction() için bir yöntem yaratın ve OnYur'dan MyAction() 'ı çağırın. Aksi takdirde, MyAction – Fred

+1

@Fred'i gerçekleştirmek için OnLoad'u çağırması gereken tüketiciler için net değil. Yazdıklarımın çakıştığı konusunda tartıştığınız hiçbir şey yok. Özellikle, OnLoad uygulamasının başlatmadan sonra gerçekleştiğinden bahsetmiştim ve OnLoad'da * control * eklemeyi asla önermedim. Senin noktanıza gelince 3- Tüketiciler asla "OnLoad" olarak adlandırmaz - çalışma zamanında gerçekleşir. Kod başka bir yerde yeniden kullanılmayacaksa, başka bir yöntemin tanıtılmasında ayrı bir avantaj yoktur. (Yine de kabul ediyorum, eğer "MyAction" tekrar kullanılacak bir şeyse, kendi yönteminde olmalı - cevabım bunu engelleyemez veya önermez) –

+0

Denetimleri eklemeye ne dersiniz? çıkışlar, liste kutuları, vb? Deneyimden, OnLoad'da yapmak daha yavaş konuşuyorum. MyAction hakkındaki nokta, 1. paragrafınızın sonunun (belki de yanlış) bir yorumudur. Genel olarak, genel bir kuralın, yük altında "önemli" bir şey yapmadığını söyleyebilirim. Düşünebildiğim geçerli tek eylem, geçerli düzen bilgisinin (örneğin, formun/pikselin kontrol konumunun boyutu) bilgisi gerektiren bir şeydir. Sunucunuzun veri başlatma işlemine başlaması gerektiğinden, bu durumun herhangi bir sunum modelini (örn. MVP) izlediğinize dair güzel bir not olduğunu unutmayın. – Fred

27

Yükleme olayını kullanmayın, OnLoad() yöntemini geçersiz kılın. Bu, form sınıfından türettiğinizde her şeyin öngörülebilir bir sırada çalışmasını sağlar. Bunu, yalnızca bilinmesi gereken asıl formun büyüklüğünü gerektiren form başlatma için kullanmalısınız. Ölçeklendirme veya kullanıcı tercihleri ​​nedeniyle tasarım boyutundan farklı olabilir ve gerçek boyut, yerel pencere oluşturuluncaya kadar bilinmez.

OnLoad yöntemindeki denetimlerin başlatılması mümkündür ancak özellikle ListView ve TreeView için çok yavaş olabilir. Onları yapıcıda başlatırsanız, kendi yerel Windows denetimleri oluşturulduğunda toplu başlatılabilir.

Özel bir özel durum: Bir MDI alt penceresinin oluşturulması her zaman OnLoad() uygulamasında yapılmalıdır, kurucuda bir alt öğe oluşturduğunuzda MDI çubuğunu dağıtan bir tesisat kodu vardır.