/// <summary>
/// 文本框输入验证(开关版)(Validated)
/// </summary>
/// <param name="sender">文本信息</param>
/// <param name="e"></param>
/// <param name="textBoxName">文本框对象</param>
/// <returns>返回是否是正确格式</returns>
private void TextBoxLostFocusOpen(object? sender, EventArgs e)
{
// 默认的IP地址
string _IP = "192.168.1.234";
int DecimalPointCounting = 0;//判断小数点数量
if (sender != null)
{
string? text = sender.ToString();//获取控件文本
if (text != null)
{
string[] textArr = text.Split(' ');//分割控件文本
text = textArr[2];
char[] charsText = text.ToCharArray();//字符串转Char类型
bool MessOpen = false;//是否是正确格式,真:格式错误
if (text.Equals(""))
{
_controllerAdd.Text = _IP;
}
else
{
//bool id = Regex.IsMatch(text, @"(\.{3})");/*\\d*/
//Regex rx = new Regex(@"^((2(5[0-5]|[0-4]\d))|1\d{2}|[1-9]?\d)(\.((2(5[0-5]|[0-4]\d))|1\d{2}|[1-9]?\d)){3}$", RegexOptions.Compiled | RegexOptions.IgnoreCase);
//bool id = rx.IsMatch(text);
for (int i = 0; i < charsText.Length; i++)
{
//允许输入退格键和回车和小数点
if (charsText[i] != '\b' && charsText[i] != '\r' && charsText[i] != '.')
{
if ((charsText[i] < '0') || (charsText[i] > '9'))
{//当按下键不是0-9时
MessOpen = true;//格式错误
}
}
if (charsText[i] == '.')
{
DecimalPointCounting++;//判断小数点数量
}
}
if (MessOpen)
{
MessageBox.Show("只允许输入数字、退格、回车和小数点,请重新输入," + "正确的格式:XXX.XXX.X.X");
_controllerAdd.Text = _IP;
}
else if (DecimalPointCounting != 3)
{
MessageBox.Show("请输入正确的格式:XXX.XXX.X.X");
_controllerAdd.Text = _IP;
}
else
{
string[] ip = text.Split(".");
bool ErrOp = false;
bool isOk = true;
for (int i = 0; i < ip.Length; i++)
{
isOk = int.TryParse(ip[i], out int value);
if (value > 255)
{
ErrOp = true;
}
}
if (!isOk)
MessageBox.Show("请输入正确的格式:XXX.XXX.X.X");
if (ErrOp)
{
_controllerAdd.Text = _IP;
MessageBox.Show("不能超过255,请输入正确的地址");
}
}
}
}
}
}
/// <summary>
/// 文本框输入验证
/// </summary>
/// <param name="sender">文本信息</param>
/// <param name="e"></param>
/// <param name="textBoxName">文本框对象</param>
/// <returns>返回是否可以继续执行</returns>
private bool TextBoxLostFocus(object? sender, EventArgs e, TextBox textBoxName)
{
bool Switch = true;
if (sender != null)
{
string? text = sender.ToString();
if (text != null)
{
string[] textArr = text.Split(' ');
text = textArr[2];
char[] charsText = text.ToCharArray();
bool MessOpen = false;
_textBoxText = text;
for (int i = 0; i < charsText.Length; i++)
{
if (charsText[i] != '\b' && charsText[i] != '\r' && charsText[i] != '-')//允许输入退格键和回车
{
if ((charsText[i] < '0') || (charsText[i] > '9'))
{//当按下键不是0-9时
MessOpen = true;
}
}
}
if (MessOpen)
{
MessageBox.Show("只允许输入数字、-、退格和回车键,请重新输入");
_textBoxNameT = textBoxName;
SetText(textBoxName.Name);
Switch = false;//不能继续执行
_textBoxText = "";
}
}
}
return Switch;
}
/// <summary>
/// 文本框绑定的事件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void TextBoxEventLostFocus(object? sender, EventArgs e)
{
try
{
string textBoxNameS = "";//保存控件名
if (sender != null)
{
textBoxNameS = ((System.Windows.Forms.Control)sender).Name;//获取调用事件的控件名
TextBox te = (TextBox)sender;
DetermineControllerName(textBoxNameS);//获取控件对象
}
if (_textBoxNameT != null && textBoxNameS != null)
{
bool Switch = TextBoxLostFocus(sender, e, _textBoxNameT);//判断是否需要继续判断
if (Switch)
{
if (!_textBoxText.Equals(""))
{
double textBoxValue = double.Parse(_textBoxText);
if (textBoxNameS.Equals("positionErrorW") || textBoxNameS.Equals("positionErrorZ") || textBoxNameS.Equals("positionErrorY") || textBoxNameS.Equals("positionErrorX"))
{
if (textBoxValue >= 2147483647 || textBoxValue <= -2147483648)
{
_textBoxNameT.Text = _positionErrorAcquiesce;
}
}
else if (textBoxNameS.Equals("frontLimitW") || textBoxNameS.Equals("frontLimitZ") || textBoxNameS.Equals("frontLimitY") || textBoxNameS.Equals("frontLimitX"))
{
if (textBoxValue >= 2147483647 || textBoxValue <= -2147483648)
{
_textBoxNameT.Text = _frontLimitAcquiesce;
}
}
else if (textBoxNameS.Equals("backLimitW") || textBoxNameS.Equals("backLimitZ") || textBoxNameS.Equals("backLimitY") || textBoxNameS.Equals("backLimitX"))
{
if (textBoxValue >= 2147483647 || textBoxValue <= -2147483648)
{
_textBoxNameT.Text = _backLimitAcquiesce;
}
}
}
else
{
SetText(textBoxNameS);
}
}
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message + "文本框绑定的事件");
}
}
修改后:
textBoxR.LostFocus += TextBoxEventLostFocus;
/// <summary>
/// 文本框绑定的事件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void TextBoxEventLostFocus(object? sender, EventArgs e)
{
try
{
string textBoxNameS = "";//保存控件名
if (sender != null)
{
textBoxNameS = ((System.Windows.Forms.Control)sender).Name;//获取调用事件的控件名
TextBox te = (TextBox)sender;
}
if ( textBoxNameS != null)
{
bool Switch = TextBoxLostFocus(sender, e);//判断是否需要继续判断
if (Switch)
{
}
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message + "文本框绑定的事件");
}
}
/// <summary>
/// 文本框输入验证
/// </summary>
/// <param name="sender">文本信息</param>
/// <param name="e"></param>
/// <param name="textBoxName">文本框对象</param>
/// <returns>返回是否可以继续执行</returns>
private bool TextBoxLostFocus(object? sender, EventArgs e)
{
bool Switch = true;
if (sender != null)
{
string? text = sender.ToString();
if (text != null)
{
string[] textArr = text.Split(' ');
text = textArr[2];
char[] charsText = text.ToCharArray();
bool MessOpen = false;
for (int i = 0; i < charsText.Length; i++)
{
if (charsText[i] != '\b' && charsText[i] != '\r' && charsText[i] != '-')//允许输入退格键和回车
{
if ((charsText[i] < '0') || (charsText[i] > '9'))
{//当按下键不是0-9时
MessOpen = true;
break;
}
}
}
if (MessOpen)
{
Switch = false;//不能继续执行
throw new Exception("只允许输入数字、-、退格和回车键,请重新输入");
}
}
}
return Switch;
}