Наиболее частая причина этого - закрытие окна и проверка, устанавливающая всплывающую подсказку для невидимого элемента управления.
Я не отлаживал в .Net Code, но довольно неплохо представляю, где в коде ToolTip.CreateHandle появляется ошибка:
private void CreateHandle()
{
if (this.GetHandleCreated())
{
return;
}
IntPtr userCookie = UnsafeNativeMethods.ThemingScope.Activate();
try
{
SafeNativeMethods.InitCommonControlsEx(new NativeMethods.INITCOMMONCONTROLSEX
{
dwICC = 8
});
CreateParams createParams = this.CreateParams;
if (this.GetHandleCreated())
{
return;
}
//HERE! I suspect window is null when the form is closed
this.window.CreateHandle(createParams);
}
finally
{
UnsafeNativeMethods.ThemingScope.Deactivate(userCookie);
}
if (this.ownerDraw)
{
int num = (int)((long)UnsafeNativeMethods.GetWindowLong(new HandleRef(this, this.Handle), -16));
num &= -8388609;
UnsafeNativeMethods.SetWindowLong(new HandleRef(this, this.Handle), -16, new HandleRef(null, (IntPtr)num));
}
Условие исправить это очень просто, просто проверьте, видима ли форма или, как Бенджамин RAIBAUD упоминает Disposing = false, перед вызовом ToolTip контролирует метод SetToolTip:
C #:
if (!this.Disposing) ttpHoverText.SetToolTip(targetControl, brokenText);
VB.Net:
If Me.Disposing = False Then ttpHoverText.SetToolTip(targetControl, brokenText)
IMO Это то, что должно обрабатываться .Net Framework ...