繁体   English   中英

当文本太长时,在GroupBox中显示省略号?

[英]Showing ellipsis in GroupBox, when text is too long?

RadioButton和CheckBox具有WrapText属性。 启用后,对于控件来说太长的文本将被换行。 禁用后,省略号会出现在末尾。

标签具有执行相同功能的AutoElipsis属性,但必须启用它才能显示省略号。

如何在GroupBox中强制相同的行为?

到这里,我为您创建了自定义控件。 使用它代替GroupBox,还可以通过设计器属性或代码来启用/禁用AutoElipsis。

public class ElipsisGroupBox : GroupBox
{
    private string _tempText;
    private bool _isElipsisOn;

    public ElipsisGroupBox () : base()
    {
        _tempText = string.Empty;
        _isElipsisOn = false;
    }

    protected override void OnResize(EventArgs e)
    {
        base.OnResize(e);

        if (this.AutoElipsis)
        {
            _tempText = base.Text;
            if (_tempText.Length == 0 || base.Width == 0)
                return;

            int i = _tempText.Length;

            string textToCheck = _isElipsisOn ? _tempText : _tempText + "...";

            _isElipsisOn = false;
            while (TextRenderer.MeasureText(textToCheck, base.Font).Width > (base.Width - 14))
            {
                _isElipsisOn = true;
                textToCheck = base.Text.Substring(0, --i) + "...";
                if (i == 0)
                    break;
            }

            if (_isElipsisOn)
                _tempText = textToCheck;
        }
    }

    public override string Text
    {
        get
        {
            return this.AutoElipsis && _isElipsisOn ? _tempText : base.Text;
        }
        set
        {
            if (this.AutoElipsis && _isElipsisOn)
                _tempText = value;
            else
                base.Text = value;
        }
    }

    public bool AutoElipsis { get; set; }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM