C# winform动态让多行文本(文本的行数是可变的)在textBox中自动适应高度(文本框的高度也是可变的

.Net技术 码拜 8年前 (2016-02-22) 3501次浏览
本人在程序中用textBox1用于输出结果,设置textBox1的Multiline为true,不使用滚动条,textBox2为输入的行数,先定义一个整形变量Hnum,并在程序启动时初始化其值为0;在“确定”的按钮单击事件中执行如下代码:

  Hnum = int.Parse(textBox2.Text);
            textBox1.Size = new Size(textBox1.Width, 15 * Hnum); //15是行高
            panel1.Size = new Size(textBox1.Width, textBox1.Height);
            for (int i = 1; i <= Hnum; i++)
            {
                textBox1.Text +=  i.ToString() + "." + "中国风云人物" + Environment.NewLine;
                if (i == Hnum)
                {
                    break;
                }
            }
            textBox1.SelectionStart = textBox1.TextLength; textBox1.Focus();

(注,上面行高15的由来: textBox1的字体是宋体,大小是9pt,文本框的高度是30时,本人看到能输入两行文字,所以本人认为该字体为这个大小时,字体的高度是15)
程序的运行结果如下链接(当输入20行文字时):
https://img.alicdn.com/imgextra/i2/65248722/TB2tt7BqVXXXXakXXXXXXXXXXXX_!!65248722.jpg
(发现在这个论坛里发帖时图片很难上传)可以看到文本的最下面有好多空白,怎么去掉多余的空白?也就是多行文本的最下面应该是文本框的下边缘。

解决方案

20

用textBox1.Font.Height去判断行高

10

记得很久以前,本人用的是一个被隐藏了的具有AutoSize 和 BorderStyle.Fixed3D 属性的 Label,哈哈哈!

10

然后 TextBox.TextChanged 中 Label.Text = TextBox.Text
Label.SizedChanged 中 TextBox.Size = Label.Size

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明C# winform动态让多行文本(文本的行数是可变的)在textBox中自动适应高度(文本框的高度也是可变的
喜欢 (1)
[1034331897@qq.com]
分享 (0)