WPF Textbox İçerisine Sadece Sayı Girme
- 455
- (2)
- (5)
- 19 Tem 2020
Aşağıdaki gibi bir WPF penceresi olsun.
<Window x:Class="TestApp.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d"
Title="Kişi Oluştur" Height="360" Width="480">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="24" />
<ColumnDefinition Width="120" />
<ColumnDefinition Width="200" />
<ColumnDefinition Width="1*" />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="32" />
<RowDefinition Height="32" />
<RowDefinition Height="32" />
<RowDefinition Height="32" />
<RowDefinition Height="32" />
<RowDefinition Height="32" />
</Grid.RowDefinitions>
<TextBlock Text="İsim: " Grid.Row="0" Grid.Column="1" VerticalAlignment="Center" TextAlignment="Right" />
<TextBlock Text="Soyisim: " Grid.Row="1" Grid.Column="1" VerticalAlignment="Center" TextAlignment="Right" />
<TextBlock Text="Yaş: " Grid.Row="2" Grid.Column="1" VerticalAlignment="Center" TextAlignment="Right" />
<TextBox Grid.Row="0" Grid.Column="2" VerticalAlignment="Center" />
<TextBox Grid.Row="1" Grid.Column="2" VerticalAlignment="Center" />
<TextBox Grid.Row="2" Grid.Column="2" VerticalAlignment="Center" />
<Button Content="Kaydet" Grid.Row="3" Grid.Column="2" VerticalAlignment="Center" HorizontalAlignment="Left" Width="64" />
</Grid>
</Window>
Yaş olarak girilecek değerlerin sayı olmaması durumunda Textbox
nesnesinin arkaplanı açık kırmızı bir renk alabilir.
İlgili Textbox
nesnesine TextChanged
eventi ekleyebilirsiniz.
<TextBox Grid.Row="2" Grid.Column="2" VerticalAlignment="Center" x:Name="AgeTextBox" TextChanged="AgeTextBox_TextChanged" />
AgeTextBox_TextChanged
üzerine gelip F12 tuşuna basarsanız, arkaplanda ilgili metot oluşturulacaktır.
Arkaplandaki koda System.Text.RegularExpressions
kütüphanesini eklemeniz gerekiyor.
using System.Text.RegularExpressions;
static readonly
olarak tanımlanmış bir Regex
nesnesi kullanarak girilen metnin sayı olup olmadığı kontrol edilecektir. Kodu aşağıdaki gibi düzenleyip çalıştırabilirsiniz.
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
private static readonly Regex DigitRegex = new Regex("[^0-9,-]+");
private void AgeTextBox_TextChanged(object sender, TextChangedEventArgs e)
{
if (DigitRegex.IsMatch(AgeTextBox.Text)) AgeTextBox.Background = Brushes.LightPink;
else if (string.IsNullOrEmpty(AgeTextBox.Text)) AgeTextBox.Background = Brushes.LightPink;
else if (Convert.ToDouble(AgeTextBox.Text) <= 0.0) AgeTextBox.Background = Brushes.LightPink;
else AgeTextBox.Background = Brushes.White;
}
}
Tanımlanmış regex ifadesi, yani "[^0-9,-]+" metni sayı olmayan metinlerde doğrulanacaktır. Yani DigitRegex.IsMatch(AgeTextBox.Text)
sayı olmayan her değer için true
döndürecektir.
Eğer girilen metin sayı değilse Textbox
nesnesi arkaplanı açık pembe olacak. Ancak burada bir sorun mevcut. Girilen metin boş olduğu zaman da regex true
döndürmektedir. O yüzden ikinci bir else if
denetimi kullanılmıştır.
Bu denetimlerden sonra sayının sıfırdan küçük olup olmadığı denetlenmektedir. Bütün denetimleri geçtiğinde arkaplan beyaz renk olmaktadır.
Aynı denetim "Kaydet" butonu için Click
eventi kullanırken de yapılmalıdır.
İlişkili İçerikler
C# ile ekran görüntüsü alan bir uygulama nasıl yazılır öğrenmek için bu içeriğe bakabilirsiniz. Ekran görüntülerini ListBox üzerinde gösteren bir WPF uygulaması.