把TextBox设置成可以存储多行数据,TextBox怎么根据宽度设置它的高度,使TextBox正好显示所有文本内容?
不会的也帮着顶一下,我都好长时间没有解决掉该问题了。
先谢谢了。
不会的也帮着顶一下,我都好长时间没有解决掉该问题了。
先谢谢了。
解决方案 »
- 【提问-自定义控件】[100]当自定义集合作为属性的时候添加不进数据
- C#的StatusStrip状态栏Label的双击事件
- 用c#做邮件方面的程序 以后换工作有前途么?
- 求救~ 编译器错误信息: CS0246: 急急急!!!
- [高手帮助我]为什么执行了backgroundworker的backgroundWorker1.RunWorkerAsync();后没有执行backgroundWorker1_DoWork?!
- Winform中如何获得TreeView所有子节点的值
- 一道面试题,没做出来!
- C# 时间解析的问题
- [WinForm] MDI窗口问题:
- 求助!
- 还是报表问题
- 我想在RTF文件中 设置一个我自己的标志位(对RTF来说是合法的) , 又不影响RTF的正常显示该怎末办??
1.用户输入时,动态调整TextBox的高度?还是,TextBox从一个串赋值时动态设置高度
2.你是指web forms还是win Forms里?给你个思想:
1.先求得字符串的长度,跟据你设置的字体,求得一个字体宽度,然后得串的长度占多少个像素
2.重新设置TextBox的高度
3.TextBox.Text赋值建议,你提问时,把问题讲清楚
1.用户输入时,动态调整TextBox的高度?还是,TextBox从一个串赋值时动态设置高度
2.你是指web forms还是win Forms里?给你个思想:
1.先求得字符串的长度,跟据你设置的字体,求得一个字体宽度,然后得串的长度占多少个像素
2.重新设置TextBox的高度
3.TextBox.Text赋值建议,你提问时,把问题讲清楚
1。我需要用户输入时自动调整,还需要在串赋值时动态调整
2。我的是winform SweetRain(慧心雨)回答的效果确实是我想要的,但是是webform的。
以及窗体的高度,因为当你输入的字符串N多的时候TextBox也会被撑得很高建议:
1.先求得字符串的长度,跟据你设置的字体,求得一个字体宽度,然后得串的长度占多少个像素
再除以一行的宽度,如不能整除就取整后加1,如可以整除则不加(得到行数)
再用得到和行数剩以行高就可以得到Textbox的高度了不过这样做有点不现实
因为在你输入字符串时i与M所占的像素差很多
所以是不好计算的
2.你可以用丰富的文本框
这个控件可以加滚动条,
当你把宽度定了以后,好象是可以自动换行的
不过这个控件我只在VB中用过
C#中还没试过
topic --> textboxthis.topic.Height = topic.Font.Height * topic.Lines.Length ;
你的算法有问题:
1、用topic.Font.Height当行数很多时存在误差。
2、因为textBox有自动换行功能,因此topic.Lines.Length是不准确的。
private void textBox1_TextChanged(object sender, System.EventArgs e)
{
this.groupBox1.Invalidate();
this.Update();
Graphics g = this.groupBox1.CreateGraphics();
this.textBox2.Text = this.textBox1.Text;
SizeF size = g.MeasureString(this.textBox2.Text,this.textBox2.Font,this.textBox2.Width);
this.textBox2.Height = (int)size.Height;
g.DrawString(this.textBox2.Text,this.textBox2.Font,Brushes.Black,new RectangleF(0f,10f,size.Width,size.Height));
g.DrawRectangle(Pens.Black,new Rectangle(0,10,(int)size.Width,(int)size.Height));
g.Dispose();
}
假设你的文本框为textBox2
[DllImport("user32.dll", EntryPoint="SendMessageA")]
private static extern int SendMessage (IntPtr hwnd, int wMsg, IntPtr wParam, string lParam);private void textBox2_TextChanged(object sender, System.EventArgs e)
{
int EM_GETLINECOUNT = 0x00BA;//获取总行数的消息号
int lc = SendMessage(this.textBox2.Handle,EM_GETLINECOUNT,IntPtr.Zero,"");
int sf = this.textBox2.Font.Height * lc;
this.textBox2.ClientSize = new Size(this.textBox2.ClientSize.Width,sf + 5);
}
胜下来的问题就是每行的高度了,这个还不知道,
我至少给你50分。
private void textBox1_TextChanged(object sender, System.EventArgs e)
{
this.groupBox1.Invalidate();
this.Update();
Graphics g = this.groupBox1.CreateGraphics();
this.textBox2.Text = this.textBox1.Text;
SizeF size = g.MeasureString(this.textBox2.Text,this.textBox2.Font,this.textBox2.Width);
this.textBox2.Height = (int)size.Height;
g.DrawString(this.textBox2.Text,this.textBox2.Font,Brushes.Black,new RectangleF(0f,10f,size.Width,size.Height));
g.DrawRectangle(Pens.Black,new Rectangle(0,10,(int)size.Width,(int)size.Height));
g.Dispose();
}private void textBox1_TextChanged(object sender, System.EventArgs e)
{
this.groupBox1.Invalidate();
this.Update();
Graphics g = this.groupBox1.CreateGraphics();
this.textBox2.Text = this.textBox1.Text;
SizeF size = g.MeasureString(this.textBox2.Text,this.textBox2.Font,this.textBox2.Width);
this.textBox2.Height = (int)size.Height;
g.DrawString(this.textBox2.Text,this.textBox2.Font,Brushes.Black,new RectangleF(0f,10f,size.Width,size.Height));
g.DrawRectangle(Pens.Black,new Rectangle(0,10,(int)size.Width,(int)size.Height));
g.Dispose();
}private void textBox1_TextChanged(object sender, System.EventArgs e)
{
this.groupBox1.Invalidate();
this.Update();
Graphics g = this.groupBox1.CreateGraphics();
this.textBox2.Text = this.textBox1.Text;
SizeF size = g.MeasureString(this.textBox2.Text,this.textBox2.Font,this.textBox2.Width);
this.textBox2.Height = (int)size.Height;
g.DrawString(this.textBox2.Text,this.textBox2.Font,Brushes.Black,new RectangleF(0f,10f,size.Width,size.Height));
g.DrawRectangle(Pens.Black,new Rectangle(0,10,(int)size.Width,(int)size.Height));
g.Dispose();
}
再次谢谢大家。