Подтвердить что ты не робот

Добавить кнопку закрытия (красный x) в .NET ToolTip

Я ищу способ добавить кнопку закрытия к объекту .NET ToolTip, аналогичному тому, который имеет NotifyIcon. Я использую всплывающую подсказку как воздушный шар сообщения, называемый программно с помощью метода Show(). Это работает отлично, но нет события onclick или простого способа закрыть всплывающую подсказку. Вы должны вызвать метод Hide() где-то еще в вашем коде, и я предпочел бы, чтобы всплывающая подсказка была в состоянии закрыть себя. Я знаю, что вокруг сети есть несколько всплывающих подсказок, которые используют управляющий и неуправляемый код для выполнения этого с помощью API окон, но я предпочел бы остаться в моем удобном .NET-мире. У меня есть приложение thrid party, которое вызывает мое приложение .NET, и оно имеет сбои при попытке отобразить неуправляемые всплывающие подсказки.

4b9b3361

Ответ 1

Вы можете попробовать реализовать свое собственное окно подсказки инструмента, переопределив существующее и настроив функцию onDraw. Я никогда не пробовал добавлять кнопку, но раньше делал другие настройки с помощью всплывающей подсказки.

    1    class MyToolTip : ToolTip
    2     {
    3         public MyToolTip()
    4         {
    5             this.OwnerDraw = true;
    6             this.Draw += new DrawToolTipEventHandler(OnDraw);
    7 
    8         }
    9 
   10         public MyToolTip(System.ComponentModel.IContainer Cont)
   11         {
   12             this.OwnerDraw = true;
   13             this.Draw += new DrawToolTipEventHandler(OnDraw);
   14         }
   15 
   16         private void OnDraw(object sender, DrawToolTipEventArgs e)
   17         {
                      ...Code Stuff...
   24         }
   25     }

Ответ 2

Вы можете попробовать переопределить метод CreateParams в своей реализации класса ToolTip... то есть.

    protected override CreateParams CreateParams
    {
        get
        {
           CreateParams cp = base.CreateParams;
           cp.Style = 0x80 | 0x40; //TTS_BALLOON & TTS_CLOSE

           return cp;
        }
    }

Ответ 3

Вы можете подклассифицировать класс ToolTip с помощью собственных CreateParams, который устанавливает стиль TTS_CLOSE:

private const int TTS_BALLOON = 0x80;
private const int TTS_CLOSE = 0x40;
protected override CreateParams CreateParams
{
    get
    {
       var cp = base.CreateParams;
       cp.Style = TTS_BALLOON | TTS_CLOSE;
       return cp;
    }
}

Стиль TTS_CLOSE также требует стиля TTS_BALLOON, и вы также должны установить свойство ToolTipTitle в подсказке.

Чтобы этот стиль работал, вам нужно включить стили Common Controls v6 с помощью манифеста приложения.

Добавьте новый "Файл манифеста приложений" и добавьте следующее под <assembly> Элемент:

<dependency>
  <dependentAssembly>
    <assemblyIdentity
        type="win32"
        name="Microsoft.Windows.Common-Controls"
        version="6.0.0.0"
        processorArchitecture="*"
        publicKeyToken="6595b64144ccf1df"
        language="*"
      />
  </dependentAssembly>
</dependency> 

В Visual Studio 2012, по крайней мере, этот материал включен в шаблон по умолчанию, но прокомментирован - вы можете просто раскомментировать его.

Tooltip with close button