winform之ip地址控件textBox

笔记收藏 专栏收录该内容
45 篇文章 5 订阅

C# winform 显示编辑ip地址,无需重绘textBox或者重写textBox方法,只需要在原生textBox控件对应事件中实现对应的算法即可。

在这里插入图片描述
1、textBox keyUp事件

private void textBoxKeyUp(object sender, KeyEventArgs e)
{
    if (e.KeyCode == Keys.Back)
        return;

    String text = textBoxIP.Text;

    string[] subs = text.Split('.');

    bool update = false;

    int index = 0;
    foreach (var sub in subs)
    {
        Debug.WriteLine($"Substring: {sub}");

        if(sub != String.Empty)
        {
            if (Convert.ToUInt16(sub) > 255)
            {
                subs[index] = "255";
                update = true;
            }
        }
        else
        {
             update = true;
         }

        if((subs.Length == (index+1)) &&(sub.Length >= 3))
        {
            update = true;
        }
        index++;
    }

    if (update)
    {
        textBoxIP.Text = "";

        index = 0;
        foreach (var sub in subs)
        {
        	if (sub == String.Empty)
	            continue;
            if(index < 3)
            {
                textBoxIP.Text += String.Format("{0}.", sub);
            }
            else if (index == 3)
            {
                textBoxIP.Text += String.Format("{0}", sub);
            }
			if(index >= 4)
            {
                update = true;
            }
            index++;
        }
        textBoxIP.SelectionStart = textBoxIP.Text.Length;//设置光标在末尾   
    }
}

2、textBox click事件

private void textBoxClick(object sender, EventArgs e)
{
    String text = textBoxIP.Text;

    if (textBoxIP.SelectionStart >= text.Length)
        return;

    int offset_start = text.LastIndexOf('.', textBoxIP.SelectionStart, textBoxIP.SelectionStart);

    Debug.WriteLine("offset_start:{0}", offset_start);

    if (offset_start == -1)
    {
        textBoxIP.SelectionStart = 0;
    }
    else
    {
        textBoxIP.SelectionStart = offset_start+1;
    }

    int offset_end  = text.IndexOf('.',textBoxIP.SelectionStart, textBoxIP.Text.Length- textBoxIP.SelectionStart);

    Debug.WriteLine("offset_end:{0}", offset_end);

    if(offset_end == -1)
    {
        textBoxIP.SelectionLength = textBoxIP.Text.Length - textBoxIP.SelectionStart;
    }
    else
    {
        textBoxIP.SelectionLength = offset_end - textBoxIP.SelectionStart;
    }
            
}

3、实现功能

a)自动补充'.'
b)限制大于255输入
c)点击自动选择

  • 0
    点赞
  • 0
    评论
  • 2
    收藏
  • 打赏
    打赏
  • 扫一扫,分享海报

参与评论 您还未登录,请先 登录 后发表或查看评论
©️2022 CSDN 皮肤主题:书香水墨 设计师:CSDN官方博客 返回首页

打赏作者

eric_pyt@qq.com

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值