binarymind..

there isn't much to choose from when you have only 0 and 1 available..

TextBox przyjmujący tylko cyfry

Co do TextBox’a wpisać można wiadomo – wszystko :) Ale co jeśli chce się móc wprowadzać tam tylko określone znaki, w tym przypadku cyfry? Wiem, że to tak naprawdę jest banał, ale jednocześnie nie ma standardowej kontrolki, która zrobi to „sama z siebie”. Co wtedy? Ano, 5 minut z Google i można znaleźć nawet kilka gotowych projektów, tak jak Simple Numeric TextBox na niezawodnym The Code Project :) Jeśli zastosowanie takiej gotowej dll’ki jest z pewnych powodów konieczne, to są gotowe rozwiązania, jak chociażby to podane przeze mnie. Można też w miarę szybko stworzyć taką zmodyfikowaną kontrolkę na bazie już istniejącej. No ale co tu dużo mówić, często powodem stosowania gotowców jest chyba jednak zwyczajne lenistwo albo nieśmiertelne „nie mam na to czasu” :) A wykorzystanie zwykłego TextBox’a i zmuszenie go to tego, żeby robił co chcemy, nie jest wcale takie trudne i czasochłonne. Pomyślmy chwilę.

Co chcemy osiągnąć?

Wprowadzać tylko cyfry do TextBox’a.

Jak się do tego zabrać?

Podczas wprowadzania znaków zachodzi zdarzenie KeyPress (naciśnięcie i zwolnienie przycisku). Jeśli więc przechwycimy wprowadzany przez użytkownika znak, wystarczy sprawdzić czy jest on cyfrą. W zależności od wyniku albo zdarzenie zostanie obsłużone albo nie.

Ok, więc jak to zrobić w praktyce?

Na przykład? Tak:

void TextBox1KeyPress(object sender, KeyPressEventArgs e)
{
	if (char.IsDigit(e.KeyChar) || char.IsControl(e.KeyChar))
	{
		e.Handled = false;
	}
	else
	{
		e.Handled = true;
	}
}

Proste, prawda? Kropka w kropkę to co napisałem wcześniej :)

Oczywiście nie jest to jedyny sposób, jest ich cała masa. Można w tym samym zdarzeniu np. przechwytywać tylko konkretne kody z tablicy ASCII, które odpowiadają cyfrom. Do pracy można też zatrudnić wyrażenia regularne. Wystarczy zastosować dla wprowadzanych znaków regułę:

\d+

albo

[0-9]+

Tylko w przypadku tak banalnego filtrowania, czy jest koniecznie musimy używać klasy Regex? Dla mnie szkoda zachodu, skoro to samo można zrobić dużo prościej i szybciej.

Więc do dzieła!

O mnie

MichałWięc jaki jest Michał, czyli ja? To ktoś kto strasznie narzeka, marudzi, pije dużo kawy, mało śpi, dużo siedzi przy kompie, spędza 3/4 swojego czasu w pracy, programuje, gra po nocach WoW i QuakeLive, rozbija się po mieście na rowerze, robi zdjęcia i kimś kto uwielbia długie zdania, co widać na załączonym obrazku. Więcej? Więcej można przeczytać tutaj..

Slideshow

Get the Flash Player to see the slideshow.