思路
在现有的textbox控件中,添加4个子textbox(IP各段)、3个label(3个点)、1个panel;以达到IP输入控件的效果。


实现效果
- 不会出现选中父IP控件的情况
- 不会出现子IP控件始终在顶部的情况
- 不会出现子控件遮罩父控件的情况
- IP地址第一位不大于223,其余不大于255(这个在下列代码中未呈现);子网掩码均不大于255
- 当一段IP输入等于3位数时,自动跳至下一段
- 当按下
.时自动跳至下一段 - 当前段已被删除空时,自动跳至上一段
- 添加CIDR模式
- 添加边框效果
- Focus当前为空的子框
- 任一子框为空时,返回空
完整代码
public class SubIPBox
{
private TextBox[] _subIpBox;
private Label[] _lbl_dot;
private Panel _parentControl;
private Color panelBorderColor = Color.FromArgb(122, 122, 122);
public SubIPBox()
{
_subIpBox = new TextBox[5];
_lbl_dot = new Label[4];
}
/// <summary>
/// IP值
/// 点分十进制形式
/// </summary>
public string Text
{
get { return mergeIP(); }
set { splitIP(value); }
}
/// <summary>
/// 获得焦点
/// 当前为空的IP字框获得焦点
/// </summary>
public void Focus()
{
foreach (TextBox tb in _subIpBox)
if (tb.Text.Equals(string.Empty))
{
tb.Focus();
break;
}
}
/// <summary>
/// CIDR
/// </summary>
public string CIDR
{
get { return _subIpBox[4].Text; }
set { _subIpBox[4].Text = value; }
}
/// <summary>
/// 合并各段IP内容
/// 其中一段为空时,返回空字符
/// </summary>
/// <returns>点分十进制</returns>
private string mergeIP()
{

480

被折叠的 条评论
为什么被折叠?



