您的位置:首页 > 职场人生

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

2013-02-28 14:11 549 查看
 ------- 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培训、期待与您交流! -------
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: