ip控件
添加事件
maskedTextBox1.KeyPress += MaskedTextBox_KeyPress;
maskedTextBox2.KeyPress += MaskedTextBox_KeyPress;
maskedTextBox3.KeyPress += MaskedTextBox_KeyPress;
private void MaskedTextBox_KeyPress(object sender, KeyPressEventArgs e)
{
MaskedTextBox texBox = sender as MaskedTextBox;
int ret = SetValidData(texBox, texBox.SelectionStart, e.KeyChar);
texBox.SelectionStart = ret;
}
设置光标位置函数
private int SetValidData(MaskedTextBox textBox,int start,char input)
{
try
{
string text = textBox.Text.PadRight(15),ipText = text;
if (input >= '0' && input <= '9')
{
//ipText = ipText.Remove(start - 1);
ipText = ipText.Insert(start, input.ToString());
}
int index = start / 4, ipPiece = 0;
string[] ip = ipText.Split(new char[] { '.' });
int.TryParse(ip[index],out ipPiece);
if (ipPiece < 0 || ipPiece > 255) return (index + 1) * 4;
if (ip[index].Trim().Length>0&&ipPiece==0) return (index + 1) * 4;
if (ip[index].Trim().Length <= 3&& start%4>2)
{
ip[index] = text.Split(new char[] { '.' })[index].Remove(0,1).PadRight(3);
textBox.Text = string.Join(".", ip);
start -= 1;
}
if (input == '.') start = (index+1)*4;
return start;
}
catch (Exception) { return start; }
}
ip赋值使用,SetData函数赋值
private void SetData(MaskedTextBox textBox, string ipData)
{
int iStartIndex = 0;
ipData.ToList().ForEach(o => {
int ret = SetValidData(textBox, iStartIndex, o);
textBox.Text = textBox.Text.Insert(ret, o.ToString());
iStartIndex = (iStartIndex == ret ? iStartIndex+1 : ret);
});