WPF Textbox İçerisine Sadece Sayı Girme

  • 385
  • (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>

wpf textbox

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;
    }
}

wpf textbox regex

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

WPF uygulaması içerisinde TextBox nesnesinin kullanım şekillerini bu içerikle öğrenebilir ve uygulayabilirsiniz.

C# dilinde oluşturacağınız bir kayıt(register) sayfasında girilen kullanıcı adı ve şifrenin şartlarını denetleyebileceğiniz regex denetim işlemini inceleyebilirsiniz.

Paylaşın
Etiket Bulutu