c# - IP 地址的字段验证

标签 c# winforms validation controls keyboard

我试图阻止用户在 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/

相关文章:

javascript - 我怎样才能获得这个链接元素?始终显示 "Unable to find element with link text == Search"

c# - c#中list<>和dictionary<>有什么区别

c# listview 取消选择项目

c# - 绑定(bind)到数据表中的数字字段时如何允许空值?

jquery - 使用 Jquery 查找输入的 Foreach

c# - 'var' 的目的是什么?

c# - GroupBy 键值对列表,然后重新组合结果

javascript - 在 AngularJS 中禁用不需要的验证(条件验证)

javascript - 字符串未被识别为有效的日期时间 - 但它在另一台服务器上运行顺利

正在运行的 python 代码停止运行