J'ai créé un programme à base de formulaire nécessitant une validation des entrées. Je dois m'assurer que l'utilisateur ne peut entrer que des valeurs numériques dans la zone de texte distance.
Jusqu'ici, j'ai vérifié que la zone de texte contient quelque chose, mais si elle a une valeur, il convient de valider que la valeur entrée est numérique:
else if (txtEvDistance.Text.Length == 0)
{
MessageBox.Show("Please enter the distance");
}
else if (cboAddEvent.Text //is numeric)
{
MessageBox.Show("Please enter a valid numeric distance");
}
Vous pouvez essayer la méthode TryParse qui vous permet d'analyser une chaîne en un entier et de renvoyer un résultat booléen indiquant le succès ou l'échec de l'opération.
int distance;
if (int.TryParse(txtEvDistance.Text, out distance))
{
// it's a valid integer => you could use the distance variable here
}
Voici un autre simple {solution} _
try
{
int temp=Convert.ToInt32(txtEvDistance.Text);
}
catch(Exception h)
{
MessageBox.Show("Please provide number only");
}
Si vous souhaitez empêcher l'utilisateur de saisir des valeurs non numériques au moment de saisir les informations dans la zone de texte, vous pouvez utiliser Event OnKeyPress de la manière suivante:
private void txtAditionalBatch_KeyPress(object sender, KeyPressEventArgs e)
{
if (!char.IsDigit(e.KeyChar)) e.Handled = true; //Just Digits
if (e.KeyChar == (char)8) e.Handled = false; //Allow Backspace
if (e.KeyChar == (char)13) btnSearch_Click(sender, e); //Allow Enter
}
Cette solution ne fonctionne pas si l'utilisateur colle les informations dans la zone de texte à l'aide de la souris (clic droit/coller), auquel cas vous devrez ajouter une validation supplémentaire.
Vous pouvez le faire en javascript côté client ou en utilisant un regex validator dans la zone de texte.
script type="text/javascript" language="javascript">
function validateNumbersOnly(e) {
var unicode = e.charCode ? e.charCode : e.keyCode;
if ((unicode == 8) || (unicode == 9) || (unicode > 47 && unicode < 58)) {
return true;
}
else {
window.alert("This field accepts only Numbers");
return false;
}
}
</script>
<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
<asp:RegularExpressionValidator ID="RegularExpressionValidator6" runat="server" Display="None" ErrorMessage="Accepts only numbers." ControlToValidate="TextBox1" ValidationExpression="^[0-9]*$" Text="*"></asp:RegularExpressionValidator>
Je suis d'accord avec Int.TryParse, mais vous pouvez aussi utiliser Regex.
Regex nonNumericRegex = new Regex(@"\D");
if (nonNumericRegex.IsMatch(txtEvDistance.Text))
{
//Contains non numeric characters.
return false;
}
Tu peux faire comme ça
int outParse;
// Check if the point entered is numeric or not
if (Int32.TryParse(txtEvDistance.Text, out outParse) && outParse)
{
// Do what you want to do if numeric
}
else
{
// Do what you want to do if not numeric
}
J'ai cette extension qui est un peu polyvalente:
public static bool IsNumeric(this object value)
{
if (value == null || value is DateTime)
{
return false;
}
if (value is Int16 || value is Int32 || value is Int64 || value is Decimal || value is Single || value is Double || value is Boolean)
{
return true;
}
try
{
if (value is string)
Double.Parse(value as string);
else
Double.Parse(value.ToString());
return true;
}
catch { }
return false;
}
Cela fonctionne pour d'autres types de données. Devrait bien fonctionner pour ce que vous voulez faire.
if (int.TryParse(txtDepartmentNo.Text, out checkNumber) == false)
{
lblMessage.Text = string.Empty;
lblMessage.Visible = true;
lblMessage.ForeColor = Color.Maroon;
lblMessage.Text = "You have not entered a number";
return;
}
Voici une solution qui autorise uniquement le numérique avec un signe moins ou une décimale avec un signe moins et un point décimal. La plupart des réponses précédentes ne prenaient pas en compte le texte sélectionné. Si vous attribuez la valeur false à ShortcutsEnabled de votre zone de texte, vous ne pouvez pas non plus coller de déchets dans votre zone de texte (cela désactive le clic droit). Certaines solutions vous permettaient d'entrer des données avant le moins. S'il vous plaît vérifier que j'ai tout attrapé!
private bool DecimalOnly_KeyPress(TextBox txt, bool numeric, KeyPressEventArgs e)
{
if (numeric)
{
// Test first character - either text is blank or the selection starts at first character.
if (txt.Text == "" || txt.SelectionStart == 0)
{
// If the first character is a minus or digit, AND
// if the text does not contain a minus OR the selected text DOES contain a minus.
if ((e.KeyChar == '-' || char.IsDigit(e.KeyChar)) && (!txt.Text.Contains("-") || txt.SelectedText.Contains("-")))
return false;
else
return true;
}
else
{
// If it's not the first character, then it must be a digit or backspace
if (char.IsDigit(e.KeyChar) || e.KeyChar == Convert.ToChar(Keys.Back))
return false;
else
return true;
}
}
else
{
// Test first character - either text is blank or the selection starts at first character.
if (txt.Text == "" || txt.SelectionStart == 0)
{
// If the first character is a minus or digit, AND
// if the text does not contain a minus OR the selected text DOES contain a minus.
if ((e.KeyChar == '-' || char.IsDigit(e.KeyChar)) && (!txt.Text.Contains("-") || txt.SelectedText.Contains("-")))
return false;
else
{
// If the first character is a decimal point or digit, AND
// if the text does not contain a decimal point OR the selected text DOES contain a decimal point.
if ((e.KeyChar == '.' || char.IsDigit(e.KeyChar)) && (!txt.Text.Contains(".") || txt.SelectedText.Contains(".")))
return false;
else
return true;
}
}
else
{
// If it's not the first character, then it must be a digit or backspace OR
// a decimal point AND
// if the text does not contain a decimal point or the selected text does contain a decimal point.
if (char.IsDigit(e.KeyChar) || e.KeyChar == Convert.ToChar(Keys.Back) || (e.KeyChar == '.' && (!txt.Text.Contains(".") || txt.SelectedText.Contains("."))))
return false;
else
return true;
}
}
}
Pour vérifier si la valeur est un double:
private void button1_Click(object sender, EventArgs e)
{
if (!double.TryParse(textBox1.Text, out double myX))
{
System.Console.WriteLine("it's not a double ");
return;
}
else
System.Console.WriteLine("it's a double ");
}