Wpf İle Event Olayları (LastFocus,PreviewTextInput) Sender


   Merhaba Arkadaşlar bu makalemde bir olaya birden fazla nesneyi yönlendirerek nasıl istedeğimiz kriterleri uygulayacağımızı anlatmaya çalışacağım...
 
   Asıl anlatmak istediğim double(100.05) türündeki veriler için alanları kısıtlamak aslında. Yani şöyle düşünelim birden fazla double(100.05) türünden veri alacak TextBox'larımız var bu alanlara sadece rakama zorlamak ve misal bir tane virgül(,) veya sadece bir tane nokta(.) girmesine olanak sağlayarak hatadan kaçınmak ve her TextBox için ayrı ayrı kod yazmaktanda kaçınmak...




Normal Windows Formlar için  KeyPress olayını kullanıyoruz ama WPF ekrenında PreviewİnputText olayını kullanacaz. Nesneye herhangibir olay olduğunda oluşacak olay.

Şimdi bir tane PreviewInputText olayı oluşturalım ve diğer bütün TextBoxlarımıza buraya yönlendirelim...


private void txtXrfau_PreviewTextInput(object sender, TextCompositionEventArgs e)
   {
            if (!char.IsNumber(e.Text, e.Text.Length - 1) && (((e.Text != "." && e.Text != ",") || (((TextBox)sender).Text.IndexOf(',') != -1 || ((TextBox)sender).Text.IndexOf('.') != -1))))
                e.Handled = true;
   }


Kod buloğumuz yukarıdaki gibi olacak

(!char.IsNumber(e.Text, e.Text.Length - 1 ) ---> Bu kısım ile sadece rakam girmeye zorluyoruz..

(((e.Text != "." && e.Text != ",") || (((TextBox)sender).Text.IndexOf(',') != -1 || ((TextBox)sender).Text.IndexOf('.') != -1))) --->  Bu kısımda ise gelen elemanın içini kontrol ederek sadece virgül veya nokta girişinede izin verdiriyoruz. Yalnız bunlardan herhangi biri giriş yapıldığında tekrar girişi engelleniyoru



 Evet arkadaşlar yukarıdaki kod bloğundan da anlaşılacağı gibi birden fazla nesneye istediğimiz kısıtlamaları gerçekleştirdik. Yukarıdaki kod göz önünde bulunulduğunda TextBox'lara giriş aşağıdaki gibi olacaktır...


1) 120.00000 Vs. 
2) 120,00 Vs.

Hatalı Girşler : (Engelledik)

1) Harf Grişi
2) 120,00.00
3) 120.00,00

Vb. hatalı girişlerde engellemiş olduk...


Şimdide LastFocus Olayı ile de girilen double tipideki veriyi belli bir format("####.00") yazdırmaya bakalım... Aynı Şekilde bir LastFocus Olayı oluşturup diğer nesneleri de buraya yönlendirelim..



 private void txtXrfau_LostFocus(object sender, RoutedEventArgs e)
   {
            ((TextBox)sender).Text = ((TextBox)sender).Text.Replace(',', '.');

            if (((TextBox)sender).Text != "")
                ((TextBox)sender).Text = Convert.ToDouble(((TextBox)sender).Text).ToString("###.00");
    }

Yukarıdaki kod bloğunda da 120,056 gibi girilen değeri 12.06 gibi yazılması sağlıyoruz..





Umarım faydalı bir makale olmuştur..Bir sonraki makalemde görüşmek dileği ile...









Hiç yorum yok:

Yorum Gönder