Сделать видимым baloonTipText до тех пор, пока он не будет нажат

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

notifyIcon1.Icon = new Icon(SystemIcons.Application, 40, 40);
notifyIcon1.Visible = true;
notifyIcon1.Text = "Test Notify Icon Demo";
notifyIcon1.BalloonTipText =count+ " Alerts";
notifyIcon1.BalloonTipIcon = ToolTipIcon.Info;
notifyIcon1.BalloonTipTitle = "Alert!";
notifyIcon1.ShowBalloonTip(999999999);

Наконечник шарика становится невидимым по истечении установленного времени (999999999). Но я хочу показывать кончик шарика до тех пор, пока он не будет нажат, так как у меня есть событие baloontipclicked.

Как сделать baloontip видимым навсегда?


person sushma    schedule 17.09.2011    source источник
comment
Возможный дубликат stackoverflow.com/questions/2920029/. Это невозможно. Поведение Windows по умолчанию исчезает после определенного тайм-аута, если пользователь активен (активность клавиатуры и мыши —> msdn.microsoft.com/en-us/library/ms160064.aspx)   -  person Christophe Geers    schedule 17.09.2011
comment
Оболочка применяет правила по этому поводу. Тайм-аут не начинает отсчитываться до тех пор, пока он не покажет, что пользователь мог его видеть, и его нельзя сделать слишком длинным. Если вам нужно постоянное уведомление, вам не следует использовать всплывающую подсказку. Лучше всего использовать обычную самую верхнюю форму, иначе нет гарантии, что она сможет конкурировать с другими самыми верхними окнами.   -  person Hans Passant    schedule 17.09.2011


Ответы (2)


из MSDN:

Минимальное и максимальное значения тайм-аута устанавливаются операционной системой и обычно составляют 10 и 30 секунд соответственно, однако это может варьироваться в зависимости от операционной системы. Значения времени ожидания, которые слишком велики или слишком малы, корректируются до соответствующего минимального или максимального значения. Кроме того, если пользователь не использует компьютер (никаких событий с клавиатурой или мышью не происходит), то система не учитывает это время в тайм-ауте.

Кажется, невозможно переопределить максимальный тайм-аут (в конечном итоге настроенный Windows и ограниченный 30 секундами, даже если вы укажете более длинный), поэтому уведомление исчезнет, ​​не будет ждать, пока вы нажмете на него через 2 минуты.

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

person Davide Piras    schedule 17.09.2011

Вы можете показать его снова, если он не был нажат. У вас есть событие закрытия (BalloonTipClosed), если пользователь не нажал его, просто покажите его снова.

private void ShowBalloonTip(int minutes) {
    notifyIcon.BalloonTipIcon = ToolTipIcon.Error;
    notifyIcon.BalloonTipText = "Text";
    notifyIcon.BalloonTipTitle = "Title";
    notifyIcon.ShowBalloonTip(minutes* 60 * 1000);
    m_showUntil = DateTime.Now.AddMinutes(minutes);
}


private void notifyIcon_BalloonTipClosed(object sender, EventArgs e) {
    if (m_showUntil > DateTime.Now)
        notifyIcon.ShowBalloonTip(60 * 1000);
}
private void notifyIcon_BalloonTipClicked(object sender, EventArgs e) {
    m_showUntil = DateTime.MinValue;
    (..)
}
person Kalay    schedule 18.04.2013
comment
Просто незначительная проблема. Если другое уведомление приходит, когда оно включено, оно переводит приложение в состояние «не отвечает». Тем, кто думает о применении этого фрагмента кода к своему коду, следует отредактировать его, чтобы ограничить его только одним уведомлением одновременно. - person Baz Guvenkaya; 27.10.2014