黑马程序员—关于winform中如何令textbox随输入的文本内容的长度而实时改变宽度

本文介绍了如何在WinForm应用中,使TextBox控件的宽度根据输入文本的长度实时调整,以提升用户体验。作者指出,文本长度与控件宽度的关系并不直接,汉字和其它字符的宽度比例不同。提供了一个简单的代码实现,在TextBox的TextChanged事件中调整宽度,注意处理汉字和空格的情况。

 ------- Windows Phone 7手机开发.Net培训、期待与您交流! -------

  

                为了提高用户体验,或者美化界面,为控件加入一些动态效果是一个好主意。今天我就演示如何令winform中的textbox随内容长度实时变动。

                在开始之前,和大家分享下我在实现这个效果前遇到的一个主要问题。

                一开始,我的想法是根据输入的字符串的长度textbox.text.lenth来改变textbox的宽度width。但实际操作后发现,text.lenth和width并不对等。或者说,lenth只是代表字符串的长度,不代表其“宽度”,即我们所看到的大小宽度。width为1的textbox并不能显示长度为1的字符。并且当输入的内容为汉字时,情况又不一样了,如果说宽度10能刚好放下一个字母、数字、或符号,当我们在宽度为10的textbox中输入1个汉字时,它却放不下了,这个汉字会被往左移,只显示右边部分。因此,我认为不同字符的长度与textbox的宽度的比值是有规律的。于是开始试验,结果却不是很完美,我没法归纳出其中的规律只能得到一个大概的比值。不过这也够用了。但要注意的是汉字与其他字符是不一样的。这个是关键,否则在输入的时候容易将内容往左边挤出textbox外。还有一点要注意的是,空格也要考虑进去。

           好了,现在附上我的代码,不是很完美,但总体效果还是不错的。该方法只要在textbox的textchanged()事件中调用就行。

                  //方法1:令文本框随着输入文本的长度变化
        public void Txt_changeWidth(object sender)
        {
            if (sender is TextBox)
            {
                if ((sender as TextBox).Text != "")
                {
                    if ((sender as TextBox).Width < 200 || (sender as TextBox).TextLength <= 16)
                    {
                        if ((sender as TextBox).TextLength >= 1)
                        {
                            //判断是否为汉字,关键
                            const string pattern1 = @"^[\u4e00-\u9fa5]+$";
                            Graphics g = (sender as TextBox).CreateGraphics();
                            System.Drawing.SizeF s = g.MeasureString((sender as TextBox).Text, (sender as TextBox).Font);
                            if (Regex.IsMatch((sender as TextBox).Text, pattern1))
                            {
                                (sender as TextBox).Width = (int)s.Width + 14;
                            }
                            else
                            {
                                (sender as TextBox).Width = (int)s.Width + 8;
                            }
                        }
                    }
                }                
                else
                {
                    //没内容时回到初始大小
                    (sender as TextBox).Width = 63;
                }
            }

 }

 
 
------- Windows Phone 7手机开发.Net培训、期待与您交流! -------
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值