我试图阻止用户在 C# 中输入除数字或句点之外的任何内容。文本框应该包含一个 IP 地址。我让它工作以防止非数字条目,但是我似乎无法让它允许输入句点。我怎样才能做到这一点?
private void TargetIP_KeyDown(object sender, KeyEventArgs e)
{
// Initialize the flag to false.
nonNumberEntered = false;
// Determine whether the keystroke is a number from the top of the keyboard.
if (e.KeyCode < Keys.D0 || e.KeyCode > Keys.D9)
{
// Determine whether the keystroke is a number from the keypad.
if (e.KeyCode < Keys.NumPad0 || e.KeyCode > Keys.NumPad9)
{
// Determine whether the keystroke is a backspace.
if (e.KeyCode != Keys.Back)
{
nonNumberEntered = true;
errorProvider1.SetError(TargetIP, FieldValidationNumbersOnly);
// A non-numerical keystroke was pressed.
// Set the flag to true and evaluate in KeyPress event.
}
}
}
//If shift key was pressed, it's not a number.
if (Control.ModifierKeys == Keys.Shift)
{
nonNumberEntered = true;
}
}
private void TargetIP_KeyPress(object sender, KeyPressEventArgs e)
{
// Check for the flag being set in the KeyDown event.
if (nonNumberEntered == true)
{
// Stop the character from being entered into the control since it is non-numerical.
e.Handled = true;
}
else
{
errorProvider1.Clear();
}
}
最佳答案
你应该使用 MaskedTextBox
控件而不是普通的 TextBox
控件。然后只需设置 Mask
属性到 990\.990\.990\.990
就完成了。
- 9 个可选数字或空格
- 0 位必填
- \.转义点
更新
虽然我建议使用 MaskedTextBox
,但我从来没有(至少我不记得)自己使用过它。现在我只是尝试了一下......好吧,忘记我说的话。我认为这可能是一个简单的解决方案,但它也是一个不可用的解决方案。
新的、更复杂但更好的建议和我通常做的方式。
创建一个包含四个文本框的自定义控件,三个标签之间各有一个点。
分析输入。
- 只需将控制键传递给控件即可。
- 如果用户输入点、制表符(将由控件处理)、空格,可能是第四位数字,则移动焦点。
- 舍弃所有非数字的内容。
- 如果数字落在 0 到 255 的范围之外,则丢弃该数字。
- 如果用户删除了最后一位数字,则将文本更改为 0。
- 如果用户输入非零数字,则删除前导零。
向返回输入地址的用户控件添加一个属性。
可以使属性可写并添加事件处理。
关于c# - IP 地址的字段验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/799244/