Je veux que l'utilisateur entre uniquement des valeurs numériques dans TextBox
.
J'ai ce code:
private void txtType1_KeyPress(object sender, KeyPressEventArgs e)
{
int isNumber = 0;
e.Handled = !int.TryParse(e.KeyChar.ToString(), out isNumber);
}
Mais je ne reçois pas textbox_KeyPress
event et e.KeyChar
lors de l'utilisation de WPF.
Quelle est la solution dans WPF?
Edit:
J'ai fait une solution!
private void txtName_PreviewTextInput(object sender, TextCompositionEventArgs e)
{
CheckIsNumeric(e);
}
private void CheckIsNumeric(TextCompositionEventArgs e)
{
int result;
if(!(int.TryParse(e.Text, out result) || e.Text == "."))
{
e.Handled = true;
}
}
protected override void OnPreviewTextInput(TextCompositionEventArgs e)
{
char c = Convert.ToChar(e.Text);
if (Char.IsNumber(c))
e.Handled = false;
else
e.Handled = true;
base.OnPreviewTextInput(e);
}
Vous pouvez utiliser une règle de validation ... http://www.codeproject.com/KB/WPF/wpfvalidation.aspx
Ou créez votre propre zone de texte masquable http://rubenhak.com/?p=8
Vous pouvez lier votre zone de texte avec une propriété de dépendance et à l’intérieur de la méthode de validation de la propriété de dépendance, vous pouvez vérifier si int.tryparse retourne la valeur true, sans quoi vous pouvez utiliser la valeur par défaut ou réinitialiser la valeur.
Vous pouvez également utiliser WPF ValidationRules pour savoir quand la valeur est modifiée. Une fois modifié, vous pouvez appliquer une logique pour la validation inout.
Ou vous pouvez utiliser IDataError Info pour la validation.
version peu améliorée de Hasib Uz Zaman
private void txtExpecedProfit_PreviewTextInput_1(object sender, TextCompositionEventArgs e)
{
CheckIsNumeric((TextBox)sender,e);
}
private void CheckIsNumeric(TextBox sender,TextCompositionEventArgs e)
{
decimal result;
bool dot = sender.Text.IndexOf(".") < 0 && e.Text.Equals(".") && sender.Text.Length>0;
if (!(Decimal.TryParse(e.Text, out result ) || dot ) )
{
e.Handled = true;
}
}
cela vérifiera la duplication (marque décimale) et ne permettra pas seulement (marque décimale)
//Call this code on KeyDown Event
if((e.Key >= Key.NumPad0 && e.Key <= Key.NumPad9) || (e.Key == Key.Back))
{ e.Handled = false; }
else if((e.Key >= Key.D0 && e.Key <= Key.D9))
{ e.Handled = false; }
else
{ e.Handled = true; }
private void shomaretextBox_PreviewTextInput(object sender, TextCompositionEventArgs e)
{
// xaml.cs code
if (!char.IsDigit(e.Text, e.Text.Length - 1))
e.Handled = true;
}
En xaml
<TextBox x:Name="shomaretextBox"
HorizontalAlignment="Left"
Height="28"
Margin="125,10,0,0"
TextWrapping="Wrap"
VerticalAlignment="Top"
Width="151"
Grid.Column="1"
TextCompositionManager.PreviewTextInput="shomaretextBox_PreviewTextInput" />
Dans WPF, les valeurs de code d'activation sont différentes des valeurs e.keychar normales de Winforms.
Dans l'événement PreviewKeyDown de la zone de texte, ajoutez ce code:
if ((e.key < 34) | (e.key > 43)) {
if ((e.key < 74) | (e.key > 83)) {
if ((e.key == 2)) {
return;
}
e.handled = true;
}
}
Cela permettra à l'utilisateur de ne saisir que des numéros dans la section Numpad0 - Numpad9 et D0 - D9, ainsi que dans la clé.
J'espère que ça aide, à la vôtre!