把TextBox设置成可以存储多行数据,TextBox怎么根据宽度设置它的高度,使TextBox正好显示所有文本内容?
不会的也帮着顶一下,我都好长时间没有解决掉该问题了。
先谢谢了。

解决方案 »

  1.   

    设置TextMode= "MultiLine" AutoPostBack="true",然后在TextChanged事件中写一些javascript代码之类的应该可以的
      

  2.   

    你可以求文本字符的长度,字符的高度,然后再计算设定TextBox高度,宽度(还得考虑行数)
      

  3.   

    反问你,你所谓的正好,是指:
    1.用户输入时,动态调整TextBox的高度?还是,TextBox从一个串赋值时动态设置高度
    2.你是指web forms还是win Forms里?给你个思想:
    1.先求得字符串的长度,跟据你设置的字体,求得一个字体宽度,然后得串的长度占多少个像素
    2.重新设置TextBox的高度
    3.TextBox.Text赋值建议,你提问时,把问题讲清楚
      

  4.   

    反问你,你所谓的正好,是指:
    1.用户输入时,动态调整TextBox的高度?还是,TextBox从一个串赋值时动态设置高度
    2.你是指web forms还是win Forms里?给你个思想:
    1.先求得字符串的长度,跟据你设置的字体,求得一个字体宽度,然后得串的长度占多少个像素
    2.重新设置TextBox的高度
    3.TextBox.Text赋值建议,你提问时,把问题讲清楚
      

  5.   

    iGray(C#Online) 
    1。我需要用户输入时自动调整,还需要在串赋值时动态调整
    2。我的是winform SweetRain(慧心雨)回答的效果确实是我想要的,但是是webform的。
      

  6.   

    楼上,label能输入吗?请教!
      

  7.   

    很久没做过windows的了,好像enter事件可以处理输入的问题。
      

  8.   

    TextBoxID.Attributes.Add("style","overflow:visible")
      

  9.   

    这样一来楼主不但要动态设置TextBox的高度,还要动态设置TextBox正文控件的位置
    以及窗体的高度,因为当你输入的字符串N多的时候TextBox也会被撑得很高建议:
    1.先求得字符串的长度,跟据你设置的字体,求得一个字体宽度,然后得串的长度占多少个像素
    再除以一行的宽度,如不能整除就取整后加1,如可以整除则不加(得到行数)
    再用得到和行数剩以行高就可以得到Textbox的高度了不过这样做有点不现实
    因为在你输入字符串时i与M所占的像素差很多
    所以是不好计算的
    2.你可以用丰富的文本框
    这个控件可以加滚动条,
    当你把宽度定了以后,好象是可以自动换行的
    不过这个控件我只在VB中用过
    C#中还没试过
      

  10.   

    孟子给我的好像是WEBFORM的,我要的是WINFORM的。
      

  11.   

    承让!
    topic --> textboxthis.topic.Height = topic.Font.Height * topic.Lines.Length ;
      

  12.   

    wjcking(虚拟理想-www.videa.cn) :
    你的算法有问题:
    1、用topic.Font.Height当行数很多时存在误差。
    2、因为textBox有自动换行功能,因此topic.Lines.Length是不准确的。
      

  13.   

    this.topic.Height = topic.Font.Height * topic.Lines.Length + 随便加几个数,或者取得回车的个数;
      

  14.   

    ASP.NET用TextBox1.Attributes.Add("style","overflow:visible"),如果是WINDOWSFORM这样麻烦些,楼主可以试试先固定TextBox的宽度,获取字符长度后再除一下得到行数,按除后是否有余数分成两种情况设置高度.
      

  15.   


    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();
    }
      

  16.   

    用API计算行数,然后在TextChanged中动态改变其客户区的大小:
    假设你的文本框为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);
    }
      

  17.   

    非常感谢 MyLf(不睡觉的鱼) ,终于会计算行数了。
    胜下来的问题就是每行的高度了,这个还不知道,
    我至少给你50分。
      

  18.   


    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();
    }
      

  19.   

    net_lover(孟子E章)厉害,出手不同凡响
      

  20.   

    现在的问题是用font.Height计算出来的结果不准确。
    再次谢谢大家。