黑马程序员—关于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培训、期待与您交流! -------
为了提高用户体验,或者美化界面,为控件加入一些动态效果是一个好主意。今天我就演示如何令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培训、期待与您交流! -------
相关文章推荐
- 如何控制asp.net控件TextBox输入内容的长度--(多种方法)
- TextBox的宽度随输入的文本的大小而改变的js代码
- iOS--根据文本内容的长度动态改变label的宽度(有最大值)
- TextBox的宽度随输入的文本的大小而改变的js代码
- TextBox的宽度随输入的文本的大小而改变
- css如何让<a>标签,根据输入的内容长度调整宽度,宽度自适应,那位大仙帮帮忙
- winform中如何在TextBox中只能输入数字(可以带小数点)
- 黑马程序员—关于winform中如何快速布局管理大量控件
- mfc中,COMBOBOX如何获取输入的文本内容
- 如何限制UITextField输入长度(监听textField文本变化的事件)
- c#,winform,验证输入内容,文本框,长度,errorprovider组件,方便,快捷
- 如何使STATIC控件的背景透明以及动态改变控件文本内容时闪烁的问题
- 在winform中向textbox输入内容时下面有提示信息,效果如图所示:
- WinForm 中要求在textBox中输入的内容必须是日期格式yyyy-mm-dd,判断用户输入是否有效!
- Swift - 文本输入框内容改变时响应,并获取最新内容
- 在EditText输入文本并实时改变文本的数量
- 浅析如何读取C# TextBox内容的中文长度
- C#之WinForm基础 不改变原有的,向textbox中追加新的内容
- c#,winform,验证输入内容,文本框,长度,errorprovider组件,方便,快捷
- asp.net中,js改变textBox的文本内容的触发事件是onpropertychange