ASP.NET Kullanıcı Kontrolünün DefaultEvent’ini Anlama
ASP.NET’te kullanıcı kontrolleri geliştirirken, geliştiricilerin genellikle karşılaştığı özel bir zorluk vardır: bir kullanıcı kontrolü için DefaultEvent
nasıl ayarlanır. Bu durum, iş akışınızı kolaylaştırmak istediğinizde özellikle önemlidir; böylece çift tıklama eylemleri, ihtiyaç duyduğunuz olay işleyicilerini otomatik olarak oluşturur. Bu blog yazısında, bu konuya dalacak ve potansiyel çözümleri ve içgörüleri keşfedeceğiz.
Problem Tanımı
ASP.NET’te bir kullanıcı kontrolü oluşturduğunuzu ve çift tıkladığınızda tasarım görünümünde varsayılan olay olarak tanınmasını istediğiniz bir olayı tanımladığınızı hayal edin. Bu senaryoda, OKClicked
adlı bir olaya sahip AddressBox
adlı bir kullanıcı kontrolünüz var. ASPX sayfasında kontrolü çift tıkladığınızda, Visual Studio’nun OKClicked
için bir işleyici oluşturmasını bekliyorsunuz, ancak bunun yerine Load
olayı için bir işleyici oluşturuyor. Bu neden oluyor?
Mevcut Uygulama
Kullanıcı kontrolünüzün kodunun uygulanışına bir göz atalım:
[System.ComponentModel.DefaultEvent("OKClicked")]
public partial class AddressBox : System.Web.UI.UserControl
{
public event EventHandler OKClicked;
}
Mevcut Sonuçlar
Kontrole çift tıkladıktan sonra üretilen kod şudur:
protected void AddressBox1_Load(object sender, EventArgs e)
{
}
Gördüğünüz gibi, Load
için oluşturulan olay işleyicisi beklediğiniz gibi değil ve şu soruyu akla getiriyor: Bir UserControl için DefaultEvent tanımlamak mümkün mü?
DefaultEvent Davranışını Araştırma
Miras Alınan DefaultEvent
Visual Studio’nun neden Load
olayını oluşturmayı varsayılan hale getirdiğini anlamak için, DefaultEventAttribute
‘nin miras alınabileceğini not etmek önemlidir. ASP.NET’teki UserControl
sınıfının varsayılan olayı Load
olarak ayarlanmıştır. Bu nedenle, özel kullanıcı kontrolünüz AddressBox
, bu davranışı miras alır.
- Yansıma İçgörü: Reflector gibi araçları kullanarak,
UserControl
sınıfının varsayılan olayının gerçektenLoad
olayı olduğunu görebilirsiniz. Bu nedenleOKClicked
‘i varsayılan olarak belirlemiş olsanız da, Visual Studio’nun miras alınan olayı önceliklendiriyor gibi görünüyor.
Potansiyel Çözüm Yöntemleri
Bu davranışı değiştirmek için doğrudan bir yol olmayabilir, ancak aşağıdakileri deneyebilirsiniz:
- Diğer Özellikleri Kontrol Edin: Bazen ek nitelikler veya ayarlar davranışı etkileyebilir.
DefaultEvent
işleme sürecini etkileyebilecek miras alınan nitelikleri gözden geçirin. - Özel Kontrol Düşünün: Eğer bir
DefaultEvent
ayarlamak sizin kullanım durumunuz için kritikse, olayları ve davranışlarını tam olarak kontrol edebileceğiniz bir özel kontrol oluşturmayı düşünebilirsiniz.
Sonuç
Özetle, ASP.NET kullanıcı kontrolüne çift tıkladığınızda varsayılan davranış esas olarak temel UserControl
sınıfından miras alınan özelliklerle belirlenmektedir. Kullanıcı kontrolünüz için bir DefaultEvent
belirleyebilirsiniz, ancak Visual Studio hala Load
gibi miras alınan olayları varsayılan olarak kullanabilir. Bu davranışın anlaşılması, yaklaşımınızı buna göre şekillendirmenize yardımcı olabilir.
Bonus: Koda Alt Çizgi Ekleme
Ayrıca koda alt çizgi koyma konusunu da sordunuz. C#’ta genellikle alt çizgileri kaçırmanıza gerek yoktur. Değişken ve metot adlarında doğrudan kullanabilirsiniz. Örneğin:
public void Do_Something()
{
}
ASP.NET’teki kullanıcı kontrolleri hakkında daha fazla sorunuz varsa lütfen iletişime geçin!