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çekten Load olayı olduğunu görebilirsiniz. Bu nedenle OKClicked‘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!