c# - 在离开事件时删除 MaskedTextBox 中的空格 - IP 地址验证
问题描述
我正在尝试在 maskedtextbox 中进行 IPv4 验证。我的面具设置为###.###.###.###,我让我的按键事件处理'。' 键作为进入下一个八位字节,效果很好......但是,如果一个 IP 地址在每个八位字节中没有 3 位数字,当我抓取文本字段以供使用时,我会得到随机空格。
例如:如果我输入 72.13.12.1 输出是 "72 .13 .12 .1" <- 我不想要空格。
我已经尝试进行一些验证,例如在离开 maskedtextbox 后删除空格,但如果我删除空格,我的掩码会重新启动并将其更改为“721.321.1”。
this.maskedTextBoxExternIP.ResetOnSpace = false;
this.maskedTextBoxExternIP.SkipLiterals = false;
this.maskedTextBoxExternIP.PromptChar = ' ';
this.maskedTextBoxExternIP.Mask = "###.###.###.###";
this.maskedTextBoxExternIP.ValidatingType = typeof(System.Net.IPAddress);
this.maskedTextBoxExternIP.KeyDown += new KeyEventHandler(this.maskedTextBoxExternIP_KeyDown);
this.maskedTextBoxExternIP.Enter += new EventHandler(this.maskedTextBoxExternIP_Enter);
this.maskedTextBoxExternIP.Leave += new EventHandler(this.maskedTextBoxExternIP_Leave);
private void maskedTextBoxExternIP_Leave(object sender, EventArgs e)
{
// Resets the cursor when we leave the textbox
maskedTextBoxExternIP.SelectionStart = 0;
// Enable the TabStop property so we can cycle through the form controls again
foreach (Control c in this.Controls)
c.TabStop = true;
IPAddress ipAddress;
if (IPAddress.TryParse(maskedTextBoxExternIP.Text, out ipAddress))
{
//valid ip
}
else
{
//is not valid ip
maskedTextBoxExternIP.Text = maskedTextBoxExternIP.Text.Replace(" ", string.Empty);
}
}
// Handle the Enter event
private void maskedTextBoxExternIP_Enter(object sender, EventArgs e)
{
// Resets the cursor when we enter the textbox
maskedTextBoxExternIP.SelectionStart = 0;
// Disable the TabStop property to prevent the form and its controls to catch the Tab key
foreach (Control c in this.Controls)
c.TabStop = false;
}
// Handle the KeyDown event
private void maskedTextBoxExternIP_KeyDown(object sender, KeyEventArgs e)
{
// Cycle through the mask fields
if (e.KeyCode == Keys.Tab || e.KeyCode == Keys.OemPeriod || e.KeyCode == Keys.Decimal)
{
int pos = maskedTextBoxExternIP.SelectionStart;
int max = (maskedTextBoxExternIP.MaskedTextProvider.Length - maskedTextBoxExternIP.MaskedTextProvider.EditPositionCount);
int nextField = 0;
for (int i = 0; i < maskedTextBoxExternIP.MaskedTextProvider.Length; i++)
{
if (!maskedTextBoxExternIP.MaskedTextProvider.IsEditPosition(i) && (pos + max) >= i)
nextField = i;
}
nextField += 1;
// We're done, enable the TabStop property again
if (pos == nextField)
maskedTextBoxExternIP_Leave(this, e);
maskedTextBoxExternIP.SelectionStart = nextField;
}
}
解决方案
@madreflection 我终于让IPAddressCrontrolLib工作了,我只是使用了源文件并以这种方式嵌入了库。不得不做一些捏造来清除我们那里的所有错误。现在一切都好!只是需要新的一天来度过那一天。谢谢你的帮助。
推荐阅读
- html - 弹性容器内的响应式图像高度
- node.js - 找不到节点js续集表
- mainframe - SB37在生产中异常,不能改变空间参数
- c# - 通知工作项完成而无需在 v3 上进行轮询
- javascript - 访问另一台 LAN PC 上的 Webpack Dev Server
- ios - 我有带导航的 1x、2x、3x 图像的图标
- python - 如何将我的 css 识别到我的 django 项目
- python - 小部件的 Tab 键顺序
- highcharts - 从 HTML 表生成的 Highcharts:无法动态添加第二个 yAxis
- matrix - Kotlin:对矩阵中各行的元素求和的优雅方式?