c# wpf textbox içerikleri

İyi günler

Karşılaştığım sıkıntı , WPF Projemde oluşturduğum Textbox ‘ ın istediğim kısıtlamaların ayarlanması.

Bir örnekle açıklayalım.

1- TESTPROJE diye yeni bir proje oluşturalım.

wpf_1i

 

2- Oluşturduğumuz projenin içine TextBox öğesi ekleyelim.

wpf_2

 

3-Oluşturduğumuz Texbox ‘ın  PreviewTextInput(Metin girişini dinlememizi sağlar. PreviewTextInput; konuşma, el yazısı ve diğer giriş aygıtlarını da  dinleyebilir .) event sınıfı ile ilişkilendirelim.

wpf_3

 

4- Textbox ‘ın sadece numara yazmasını istiyorsak oluşturduğumuz ctlOrnekTxt_PreviewTextInput event(Olay) ‘in içine yazıyoruz

Namespace:   System.Text.RegularExpressions
Assembly:  System (in System.dll)

using System.Text.RegularExpressions;

a .  Rakam

private void ctlOrnekTxt_PreviewTextInput(object sender, TextCompositionEventArgs e)
{
Regex regex = new Regex(“[^0-9]+”); // Girilebilecek rakam aralığı
e.Handled = regex.IsMatch(e.Text); // Girilen karakterin okunması ve eşleşip ekrana basılmasını sağlar.

/// Doğru yazımı

e.Handled = new Regex(@”[^0-9]+”).IsMatch(e.Text);
}

b. Ondalıklı(Decimal) Sayı  (“.” , “,”) kullanıma göre ayarlanmıştır

private void ctlOrnekTxt_PreviewTextInput(object sender, TextCompositionEventArgs e)

{

Regex regex = new Regex(@”(\+|-)?[0-9][0-9]*(\,[0-9]*)?(\.[0-9]*)?”);
e.Handled = !regex.IsMatch((sender as TextBox).Text.Insert((sender as TextBox).SelectionStart, e.Text));

}

c. Sadece harf

private void ctlOrnekTxt_PreviewTextInput(object sender, TextCompositionEventArgs e)

{

e.Handled = new Regex(@”^[0-9\\s]+”).IsMatch(e.Text);

}

d.Sadece harf ve istenilen karaktere izin verilmesi. (alternetif çözüm olarak)

 private void ctlOrnekTxt_PreviewTextInput(object sender, KeyEventArgs e)
 {
 e.Handled = new Regex(@"^[0-9,!\\s]+").IsMatch(e.Text);
 }

  Alternatif çözüm
 private void ctlOrnekTxt_PreviewTextInput(object sender, KeyEventArgs e)
 { 
 e.Handled = !isCharKey(e.Key) && !isPermisionKey(e.Key);
 }

 private bool isCharKey(Key inKey)
 {
 if (inKey < Key.A || inKey > Key.Oem8 )
 {
 
 if (inKey < Key.NumPad0 || inKey > Key.NumPad9)
 {
 return false;
 }
 }
 return true;
 }
 private bool isPermisionKey(Key inKey)
 {
 return inKey == Key.Delete || inKey == Key.Back 
     || inKey == Key.Tab || inKey ==Key.Space;
 }


wpf_4

Mysql ve TRUNCATE 1071 Hatası

Truncate , istenilen tablonun içini  her hangi bir koşul belirtmeden tüm veriyi temizlemeye yarar.

TRUNCATE [TABLE] tbl_name şeklinde yazılır .

   DELETE,Truncate komutu ile karıştırılır. Aralarındaki fark ise ;

   Delete komutu, belirtilen hücre,  satır, sütün veya tablonun içindeki verileri silmeye yarar (Delete komutu bir koşula  da bağlanabilir) ve  silinen tablodaki Primary key  ve auto increment (Otomatik Artan Numara) alanı en son kaldığı değerden devam  eder.

   Truncate komutu , tabloya ait veriyi serbest bırakır, böylece tüm satırları tek seferde siler ve transaction log serbest bırakma işlemini tutar. Bu yüzden veri ne kadar büyük olursa olsun çok hızlı çalışır.(Truncate komutu koşula bağlanmaz)  ve silinen tablodaki Primary key ve Auto increment değerleri sıfırlanır.

 

Örnek olarak

Araçlarımızın renklerini tutan bir veri tabanı  kurgulayalım.

1- Veri tabanımızın adı : aracrenkleridatabase_name

 

 

 

2- Renkler(Şekil 1) ve araba(Şekil 2) gösteren  iki adet tablo oluşturalım.

renkler

Şekil 1

araba

 Şekil 2

3- Bu iki tablo arasındaki ilişkiyi (Foreign Keyforeign) sağlayalım.

iliski

4- İlişkiyi kurduğumuza göre birkaç tane veri girelim

renkVeri     arabaVeri

 

5- Silmek istediğimiz tabloyu belirledikten sonra komutumuzu sorgu satırına yazalım.

Truncate aracmodel.araba;

Yaptığınızda sorunsuz silecektir . İlişkinin olduğu tabloda ise kısıtlamalardan dolayı hata verecektir.

Truncate aracmodel.renk;

Error Code: 1701. Cannot truncate a table referenced in a foreign key constraint (`aracmodel`.`araba`, CONSTRAINT `araba_ibfk_1` FOREIGN KEY (`renk_id`) REFERENCES `aracmodel`.`renk` (`id`))

Çözüm  1 ;

1 – İlişkileri keselim.

2- Truncate çalıştıralım.

3- İlişkisi olan diğer tablodaki verileri Delete ile silelim.

4- İlişkileri tekrar kuralım.

Çözüm 2;

SET FOREIGN_KEY_CHECKS = 0; 
Truncate aracmodel.renk;
TRUNCATE [TABLE] tbl_name;
TRUNCATE [TABLE] tbl_name2;
TRUNCATE [TABLE] tbl_name3;
...
..
..  
SET FOREIGN_KEY_CHECKS = 1;

Şimdi ikisi arasındaki farka gelince çözüm 2 ,çözüm 1 ‘e göre daha risklidir ;veriye zarar verme riski taşır.Silme işlemi sırasında veri tabanı işlem yapmıyorsa çözüm 2 ‘yi daha hızlı ve komutun Global olmaması daha kullanışlı hale getirir.