WinForm 的 IP 地址输入框控件通常用于用户输入 IPv4 地址时,这个控件会自动把输入的字符串分隔成四个,允许的数字范围在 0 到 255 之间的数字。以下是实现这个控件的攻略:
步骤一:创建自定义控件类
首先,我们需要创建一个继承自 TextBox 的类,并将其命名为 IPTextBox。在这个类中,我们需要添加一个后缀为 "IP" 的属性,以检测用户的输入是否是有效的 IPv4 地址。
public class IPTextBox : TextBox
{
public bool IsValidIPAddress
{
get
{
IPAddress ip;
// 检测用户输入是否是 IPv4 地址
if (IPAddress.TryParse(Text.Replace(" ", ""), out ip))
{
byte[] bytes = ip.GetAddressBytes();
// 检测是否包含四个字节
if (bytes.Length != 4)
{
return false;
}
// 检测每个字节是否在 0 到 255 的范围内
for (int i = 0; i < 4; i++)
{
if (bytes[i] < 0 || bytes[i] > 255)
{
return false;
}
}
return true;
}
return false;
}
}
}
步骤二:控制用户输入
接下来,我们需要控制用户在控件中可以输入的字符。
public class IPTextBox : TextBox
{
protected override void OnKeyPress(KeyPressEventArgs e)
{
// 防止用户输入非数字字符和其他无效字符
if (!char.IsDigit(e.KeyChar) && e.KeyChar != '.' && e.KeyChar != (char)Keys.Back && e.KeyChar != (char)Keys.Delete)
{
e.Handled = true;
}
base.OnKeyPress(e);
}
}
我们还需要控制用户输入的字符,确保输入的字符能够正确地格式化成 IPv4 地址。
public class IPTextBox : TextBox
{
protected override void OnTextChanged(EventArgs e)
{
base.OnTextChanged(e);
string[] parts = Text.Split('.');
StringBuilder sb = new StringBuilder();
foreach (string part in parts)
{
if (part.Length == 0)
{
continue;
}
int value = Math.Min(255, int.Parse(part));
sb.Append(value).Append('.');
}
Text = sb.ToString().TrimEnd(new char[] { '.' });
SelectionStart = Text.Length;
}
}
示例说明
示例一:使用 IPTextBox 控件
IPTextBox ipTextBox1 = new IPTextBox();
ipTextBox1.Location = new Point(10, 10);
ipTextBox1.Size = new Size(200, 20);
this.Controls.Add(ipTextBox1);
示例二:设计时使用 IPTextBox 控件
打开 WinForm 设计器,将 IPTextBox 控件拖放到窗体上,属性面板中可以对控件进行自定义配置。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:WinForm IP地址输入框控件实现 - Python技术站