Подсказка C # отображается недостаточно долго

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

ToolTip tt = new ToolTip();
protected virtual void pictureBox_MouseHover(object sender, EventArgs e)
{
    tt.InitialDelay = 0;
    tt.SetToolTip(this.pictureBox, "Click 'LIVE ...");
}

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


person BuZz    schedule 22.11.2011    source источник


Ответы (5)


Установите AutoPopDelay свойство чтобы быть выше - по умолчанию 5000 (5 секунд)

Обновление: Моя ошибка:

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

Таким образом, вы не можете заставить всплывающую подсказку отображаться дольше 5 секунд с помощью этого метода - вместо этого вам нужно использовать Показать, чтобы явно показать всплывающую подсказку, когда пользователь наводит курсор на окно с картинками. Просто замените вызов SetToolTip на вызов Show в обработчике событий MouseHover:

ToolTip tt = new ToolTip();
protected virtual void pictureBox_MouseHover(object sender, EventArgs e)
{
    tt.Show("Click 'LIVE ...", this.pictureBox, 10000);
}
person Justin    schedule 22.11.2011
comment
Думал примерно так же. Или просто попробовать установить ShowAlways на true в качестве обходного пути. - person alex.b; 22.11.2011
comment
+1 хороший прямой ответ и за указание значения по умолчанию. - person aevanko; 22.11.2011
comment
@Justin - Оказывается, несмотря на документацию, ничто не мешает вам установить более длительную задержку, и это действительно работает. Я просто установил его на 20 000 миллисекунд, и он работал так долго. [Использование .NET 3.5] Пользователь StackOverflow по имени Пэнни обнаружил, что максимальная задержка, которую можно установить, составляет 32 767 миллисекунд, что связано с проблемами 16-битного подписанного int и тому подобным. - person ManEatingCheese; 06.04.2015
comment
@ManEatingCheese: Не могу поверить - вы правы. Установка AutoPopDelay на 32767 действительно удерживает сообщение почти 33 секунды. Создайте из этого ответ. - person Dan W; 28.06.2015
comment
@ManEatingCheese Вау. Спасибо за это. Зачем им для этого использовать 16-битное int? Это глупо... - person Nyerguds; 03.07.2016

Установите значение свойства AutoPopDelay

 tt.AutoPopDelay = 10000;
person Serghei    schedule 22.11.2011

В отличие от ответа, описанного Джастином, мне не удалось отобразить всплывающую подсказку дольше 5 секунд с помощью метода show.

Одно из других зависаний, которые у меня были, было свойство AutomaticDelay. Короче говоря, если вы хотите настраивать AutoPopDelay, не устанавливайте AutomaticDelay.

Установка этого свойства автоматически установит ... см. MSDN:

AutoPopDelay = 10 x AutomaticDelay

InitialDelay = AutomaticDelay

ReshowDelay = (0.2) x Автоматическая задержка

Вот код, который у меня сработал:

ToolTip tt = new ToolTip();
private void someObjectName_MouseHover(object sender, EventArgs e) {
    tt = new ToolTip
    {
        AutoPopDelay = 15000,  // Warning! MSDN states this is Int32, but anything over 32767 will fail.
        ShowAlways = true,
        ToolTipTitle = "Symbolic Name",
        InitialDelay = 200,
        ReshowDelay = 200,
        UseAnimation = true
    };
    tt.SetToolTip(this.someObjectName, "This is a long message");
}

Бонус:

private void someObjectName_MouseLeave(object sender, EventArgs e)
    {
        tt.Active = false;
    }
person jetsquared    schedule 03.09.2015

ToolTip.Show(text, [control], time in milliseconds) - это то, что вам нужно, я думаю

Это позволит вам отображать длинный текст в течение определенного количества миллисекунд. Также, если ваш текст слишком длинный, вы можете вставить NewLine между текстом, чтобы он был завернут и не отображался как длинная всплывающая подсказка, охватывающая всю форму.

person V4Vendetta    schedule 22.11.2011

Я обнаружил, что следующие шаги работают для меня:

Установите для automaticdelay значение 1/10 желаемого autopopdelay.

Затем вы можете настроить начальную задержку и reshowdelay.

Ссылка MSDN < / а>

person Joel    schedule 20.07.2017