当前位置: 首页 > news >正文

TextBox IP格式化

winform textBox IP格式化输入,效果如下:

在这里插入图片描述

代码如下:

namespace WinFormsAppTest
{public partial class Form1 : Form{public Form1(){InitializeComponent();textBoxIP.Text = String.Format("{0,3}.{1,3}.{2,3}.{3,3}", 0, 0, 0, 0);textBoxIP.SelectionStart = textBoxIP.Text.Length;textBoxIP.SelectionLength = 0;}private int getCursorIndex(TextBox tb){String text = tb.Text;String[] subs = text.Split('.');//定位当前光标,在第几个字段内int cursor = tb.SelectionStart;Debug.Print($"cursor={cursor}");int cur_index = 0;int index = 0;int of = 0;foreach (var item in subs){of = text.IndexOf('.', of + 1);Debug.Print($"of={of}");if ((of >= cursor) || (of == -1)){cur_index = index;break;}index++;}Debug.Print($"cur_index={cur_index}");return cur_index;}private void setCursorIndex(TextBox tb, int index){String text = tb.Text;String[] subs = text.Split('.');int set_pos = 0;// 重新定位光标位置int j = 0;int of = 0;foreach (var item in subs){of = text.IndexOf('.', of + 1);if (of == -1){of = text.Length;}if (j == index){set_pos = of;break;}j++;}Debug.Print($"set_pos={set_pos}");textBoxIP.SelectionStart = set_pos;textBoxIP.SelectionLength = 0;}private void selectIndex(TextBox tb, int index){String text = tb.Text;String[] subs = text.Split('.');int start = 0,end=0;// 重新定位光标位置int j = 0;int of = 0;foreach (var item in subs){of = text.IndexOf('.', of + 1);if (of == -1){of = text.Length;}if (j == index){end = of;break;}j++;}start = end -3;Debug.Print($"start={start}");textBoxIP.SelectionStart = start;textBoxIP.SelectionLength = 3;}private void onClick(object sender, EventArgs e){int cur_index = getCursorIndex(textBoxIP);Debug.Print($"cur_index={cur_index}");selectIndex(textBoxIP, cur_index);}private void onTextChanged(object sender, EventArgs e){String text = textBoxIP.Text;string[] subs = text.Split('.');//定位当前光标,在第几个字段内int cur_index = getCursorIndex(textBoxIP);Debug.Print($"cur_index={cur_index}");int index = 0;int of = 0;index = 0;foreach (var item in subs){String temp = item.Replace(" ", "");if(temp.Length != 1){temp = temp.TrimStart('0');}if (temp.Length != 0){int val = Convert.ToUInt16(temp);Debug.Print($"val={val}");if (val > 255){temp = "255";}}subs[index] = temp;index++;}//if (update == true){text = textBoxIP.Text = String.Format("{0,3}.{1,3}.{2,3}.{3,3}", subs[0].Replace(" ", ""), subs[1].Replace(" ", ""), subs[2].Replace(" ", ""), subs[3].Replace(" ", ""));subs = text.Split('.');// 重新定位光标位置setCursorIndex(textBoxIP, cur_index);if ((subs[cur_index].Trim().Length==3) && (cur_index < 3)){selectIndex(textBoxIP, cur_index+1);}}}private void onKeyPress(object sender, KeyPressEventArgs e){if (e.KeyChar != '\b' && !Char.IsDigit(e.KeyChar)){e.Handled = true;}//Debug.Print($"KeyChar={e.KeyChar}");}}
}

http://www.mrgr.cn/news/63472.html

相关文章:

  • LINUX Shell命令中$0、$1-9、$#、$?、$*、$@、$!、$、$-、$IFS含义及举例
  • Flutter 鸿蒙next中的路由使用详解【基础使用】
  • Qt的信号槽机制学习一
  • vscode摸鱼学习插件开发
  • selenium无头浏览器截图并以邮件发送
  • Redis 目录
  • 便携剃须刀性能王者,小但专业,未野MAX SE剃须刀测评
  • std::optional与函数返回值的讨论
  • 【JVM详解JVM优化】聊聊JVM优化
  • 开源AI智能名片2+1链动模式S2B2C商城小程序领域的未来探索
  • 如何保护网站安全
  • “聚类+Transformer”俩搭档配享太庙!这方向发A会根本不用忧!
  • 为什么网络又称为云(cloud)?
  • 【Linux】编辑器vim 与 编译器gcc/g++
  • 别再为质量问题头疼了,六西格玛黑带培训来救场!
  • 视频制作软件新手必备:8款剪辑工具剪辑思路分享!
  • Qt 框架会经历一系列的步骤来处理这个事件。以下是完整的处理流程
  • 龙迅#LT8668EX显示器图像处理芯片 适用于HDMI1.4+VGA转4PORT LVDS,支持4K30HZ分辨率,可做OSD菜单亮度调节!
  • 【运维管理】如何像管理linux一样,批量管理windows主机
  • 【Python3】【力扣题】409. 最长回文串
  • 小程序与服务器通信webSocket和UDPSocket
  • 【前端】强制刷新、清空缓存
  • React中常用的hook函数(二)——useReducer和useContext
  • C++11之新特性 --- function包装器与lambda表达式
  • AI直播带货场景切换模块的搭建!
  • 第14课 异常处理