J'utilise le code suivant pour la validation de la zone de texte.
private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
{
e.Handled = SingleDecimal(sender, e.KeyChar);
}
public bool SingleDecimal(System.Object sender, char eChar)
{
string chkstr = "0123456789.";
if (chkstr.IndexOf(eChar) > -1 || eChar == Constants.vbBack)
{
if (eChar == ".")
{
if (((TextBox)sender).Text.IndexOf(eChar) > -1)
{
return true;
}
else
{
return false;
}
}
return false;
}
else
{
return true;
}
}
10 Réponses :
ici un code de mon application. Il gère un cas de plus, comme le fera de la sélection
const string SIGNED_FLOAT_KEY_REGX = @"^[+-]?[0-9]*(\.[0-9]*)?([Ee][+-]?[0-9]*)?$"; const string SIGNED_INTEGER_KEY_REGX = @"^[+-]?[0-9]*$"; const string SIGNED_FLOAT_REGX = @"^[+-]?[0-9]*(\.[0-9]+)?([Ee][+-]?[0-9]+)?$"; const string SIGNED_INTEGER_REGX = @"^[+-]?[0-9]+$";
Que diriez-vous d'utiliser l'exemple de MSDN A>? Utilisez-vous le '.' ' comme sépérateur décimal? Si tel que je ne sais pas pourquoi vous utilisez p>
Voici le code que j'utiliserais ...
private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
{
// allows 0-9, backspace, and decimal
if (((e.KeyChar < 48 || e.KeyChar > 57) && e.KeyChar != 8 && e.KeyChar != 46))
{
e.Handled = true;
return;
}
// checks to make sure only 1 decimal is allowed
if (e.KeyChar == 46)
{
if ((sender as TextBox).Text.IndexOf(e.KeyChar) != -1)
e.Handled = true;
}
}
Je reçois une référence d'objet non définie sur une instance d'objet.
Créer un composant hérité de la zone de texte et utilisez ce code:
protected override void OnKeyPress(KeyPressEventArgs e)
{
if (!char.IsControl(e.KeyChar) && !char.IsDigit(e.KeyChar) && e.KeyChar != '.')
{
e.Handled = true;
}
// only allow one decimal point
if (e.KeyChar == '.' && Text.IndexOf('.') > -1)
{
e.Handled = true;
}
base.OnKeyPress(e);
}
Voici une version VB.net pour la réponse de @ éclipsed4utoo
If (((Asc(e.KeyChar) < 48 Or Asc(e.KeyChar) > 57) And Asc(e.KeyChar) <> 8 And Asc(e.KeyChar) <> 46)) Then
e.Handled = True
Exit Sub
End If
' checks to make sure only 1 decimal is allowed
If (Asc(e.KeyChar) = 46) Then
If (sender.Text.IndexOf(e.KeyChar) <> -1) Then
e.Handled = True
End If
End If
Ce code pour les décimales. Si vous souhaitez utiliser un flotteur également, vous utilisez simplement un double instant INT
Et il sera supprimer des derniers cahoteurs automatisés
Je crois que c'est la solution parfaite car elle limite non seulement le texte à des chiffres, seulement un signe de premier plan, et un seul point décimal, mais permet de remplacer le texte sélectionné s'il contient un point décimal. Le texte sélectionné ne peut toujours pas être remplacé par un point décimal s'il existe un point décimal dans le texte non sélectionné. Il permet un signe moins si c'est le premier caractère ou si le texte entier est sélectionné.
Vous pouvez faire une méthode pour vérifier s'il s'agit d'un numéro.
au lieu de vérifier le alors vous pouvez appeler la méthode dans l'événement . code> en tant que séparateur décimal, vous devez l'obtenir à partir de actuelCulture code> objet Il pourrait s'agir d'un autre caractère en fonction de l'endroit où vous êtes dans le monde. p> keypress code> du Textbox code>: p>
Voici une version VB.NET qui permet une figure décimale négative, prévenir la copie et la pâte tout en veillant à ce que le panneau négatif ne soit pas au milieu du texte ou du point décimal non au début du texte
Numérique (TextControl en tant qu'objet, E comme keyresseventargs) p>
Essayez ceci avec ASP: RegularexpressionValidator code> contrôleur