Показывать подсказку для кнопки, когда текст слишком длинный - PullRequest
10 голосов
/ 03 декабря 2010

У меня есть кнопка на winform Длина текста кнопки может сильно различаться при различных операциях.

Я не хочу изменять размер кнопки (поэтому я установил для свойства «Autosize» значение false)

Как показать всплывающую подсказку (полного текста кнопки) при наведении курсора мыши, когда текст кнопки обрезается?

Обратите внимание, что всплывающая подсказка не всегда нужна ..... Я хочу ее, только когда текст кнопки обрезается

Ответы [ 5 ]

13 голосов
/ 03 декабря 2010

Надеюсь, что этот код поможет вам

if (button1.Text.Length > Your button text length to be checked)
{
    System.Windows.Forms.ToolTip ToolTip1 = new System.Windows.Forms.ToolTip();
    ToolTip1.SetToolTip(this.button1, this.button1.Text);
}

Вы должны написать этот код в событии кнопки мыши

1 голос
/ 22 октября 2014

Я не думаю, что ответы пока вполне правильные - длина отображаемой строки (и это то, что вам нужно, когда вы также учитываете размеры кнопки), может варьироваться в зависимости от шрифта и символов, которые вы используете. , Использование пропорционального шрифта, такого как Microsoft Sans Serif, будет возвращать разные размеры для строк, содержащих одинаковое количество символов, если эти символы различаются, например ::10000

"iiiiiiiiii" не такой широкий, как

"wwwwwwwwww".

Вы должны использовать MeasureString метод `Graphics class

Graphics grfx = Graphics.FromImage( new Bitmap( 1, 1 ) );

// Set a proportional font
button1.Font = new Font( "Microsoft Sans Serif", 8.25f, FontStyle.Regular );
SizeF bounds = grfx.MeasureString(
    button1.Text,
    button1.Font,
    new PointF( 0, 0 ),
    new StringFormat( StringFormatFlags.MeasureTrailingSpaces ) );
MessageBox.Show( "Text dimensions: " + bounds.Width + "x" + bounds.Height );

// Set a non-proportional font
button1.Font = new Font( "Courier New", 8.25f, FontStyle.Regular );
bounds = grfx.MeasureString(
    button1.Text,
    button1.Font,
    new PointF( 0, 0 ),
    new StringFormat( StringFormatFlags.MeasureTrailingSpaces ) );
MessageBox.Show( "Text dimensions: " + bounds.Width + "x" + bounds.Height );
1 голос
/ 10 декабря 2013

Альтернатива: используйте свойство AutoElipsis кнопки для True.

1 голос
/ 03 декабря 2010

Я думаю, вы должны вручную проверить длину текста на кнопке с размером кнопки

и, если оно больше, чем вы должны добавить свойство всплывающей подсказки времени выполнения кнопки

Не забудьте добавить элемент управления ToolTip в свой проект, перетаскивая его из панели инструментов

Спасибо

0 голосов
/ 02 июля 2018

Лучшая практика - это

    /// <summary>
    ///     Exibe texto do controle num tipo ToolTip do winform
    /// </summary>
    /// <param name="controle">Controle</param>
    /// <param name="icon"></param>
    public static void ShowTextToolTip(Control controle, ToolTipIcon icon)
    {
        try
        {
            var tooltip = new ToolTip();
            tooltip.ToolTipIcon = icon;

            controle.MouseHover += (k, args) => { tooltip.SetToolTip(controle, controle.Text); };
        }
        catch (Exception)
        {
        }
    }

Можно назвать так ...

 ShowTextToolTip(MyControlTextBox,ToolTipIcon.None);
...