我试图阻止用户在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。
如果用户输入非零数字,请删除前导零。
将属性添加到返回输入地址的用户控件。
可以使属性可写并添加事件处理。