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