winform label上字体过多不换行,字体自动缩放

.Net技术 码拜 10年前 (2014-12-14) 5230次浏览 0个评论
没听懂,
长度 你可以 监听label的 width

—-

在lable的数据给定后

if(lable.Text.Length>10)
{
lable.Font.Size=…
}else if(lable.Text.Length>20)
{…}

—-

宽度同理

—-

不换行这个怎么实现呢.要全部现实出来,又要选择适应的字体.

—-

替换文字当中所有的\n,\r类的东西,就不换行了

—-

换行是因为字体数过多,字体的整体宽度大于label的宽度所以才会换行.

—- 5分

可以设置AutoEllipsis属性为true,这样显示不出来的字就会显示成…,用户就知道没有显示全了

—-

设置AutoSize为true,Lable会根据字体多少而调整大小
但是自动得到的宽度不能直接通过Width属性得到

—-

用户的需求现在是固定一个Lable的宽度,当我输入的文字长度超过这个label的长度的时候,label不能换行,通过字体的缩放达到把所有的文字都显示在一行上.

—-

引用 6 楼  的回复:

换行是因为字体数过多,字体的整体宽度大于label的宽度所以才会换行.

你是win还是web?
win不自动换行的
web是受外部容器或者自身css控制

—-

win的…标题都写的win .

—-

   Private Sub Label1_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Label1.TextChanged
        Dim str As String = Me.TextBox1.Text.Trim
        Dim gra As Graphics = Me.CreateGraphics
        Dim _size As SizeF = gra.MeasureString(str, Me.Label1.Font)
        If (Convert.ToInt32(_size.Width)) > Me.Label1.Width Then
            MessageBox.Show("true")
        End If
    End Sub

自己写了下,但是现在有个问题就是空格无法计算宽度..不好意思.最近用的vb.net,就随手写vb的了…

—-

 Dim str As String = Me.TextBox1.Text.Trim

空格被你干掉了

求左右空格数

Me.TextBox1.Text.Length-Me.TextBox1.Text.Trim.Length

—-

我把trim去掉了无法计算长度.一个空格固定有长度的么??

—-

trim去掉了左右的

中间的空格宽度应该和你的字体大小设置有关(不确定)

这个label用默认的字体好了,你等我,我写代码去,这样聊,快累死了

—-

我要实现这个的话不是要遍历全部字体然后在判断宽度是否被超出吗?

—- 25分

using System;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

namespace WinTest
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void label1_Paint(object sender, PaintEventArgs e)
        {

        }

        private void button1_Click(object sender, EventArgs e)
        {
            this.label1.Text = this.textBox1.Text;
        }
        /// <summary>   
        /// 得到字符串的长度,一个汉字算2个字符   
        /// </summary>   
        /// <param name="str">字符串</param>   
        /// <returns>返回字符串长度</returns>   
        public  int GetLength(string str)
        {
            if (str.Length == 0) return 0;

            ASCIIEncoding ascii = new ASCIIEncoding();
            int tempLen = 0;
            byte[] s = ascii.GetBytes(str);
            for (int i = 0; i < s.Length; i++)
            {
                if ((int)s[i] == 63)
                {
                    tempLen += 2;
                }
                else
                {
                    tempLen += 1;
                }
            }

            return tempLen;
        }
        /// <summary>
        /// 这个事件你懂的
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void label1_TextChanged(object sender, EventArgs e)
        {
            int length = this.GetLength(this.label1.Text);

            //文字不换行还是不换行,关键看你字体大小,小了,就不换行
            if (length > 20)
            {
                this.label1.Font = new Font("宋体", 2);
            }
            else if (length > 15)
            {
                this.label1.Font = new Font("宋体", 5);
            }
            else if (length > 10)
            {
                this.label1.Font = new Font("宋体", 15);
            }
            else if (length > 5)
            {
                this.label1.Font = new Font("宋体", 20);
            }
            else
            {
                MessageBox.Show("看着办");
            }

        }   
    }
}

—-

我今天不聊了,有问题明天再沟通

—- 5分

这是个办法

引用 7 楼  的回复:

可以设置AutoEllipsis属性为true,这样显示不出来的字就会显示成…,用户就知道没有显示全了

也可以把AutoSize设成true,这样label长度会随内容自增长

否则你只能写方法了
先把AutoSize设成true
在while中判断label长度是不是长于你预期的,true的话把字体的Font的size减去0.1

—-

//自适应lable的宽度
addresslable.adjustsFontSizeToFitWidth = YES;
addresslable.numberOfLines = 1;

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明winform label上字体过多不换行,字体自动缩放
喜欢 (0)
[1034331897@qq.com]
分享 (0)

文章评论已关闭!