Наиболее распространенной причиной этого является закрытие окна и проверка, которая устанавливает подсказку для невидимого элемента управления.
Я не отлажена в .Net кодекса, но имеют довольно хорошее представление о том, где ошибка возникает в коде 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 Располагая = ложь перед вызовом элементов управления ToolTip SetToolTip метод:
C#
if (!this.Disposing) ttpHoverText.SetToolTip(targetControl, brokenText);
В.Б..Net:
If Me.Disposing = False Then ttpHoverText.SetToolTip(targetControl, brokenText)
IMO Это то, что должно быть обработано с помощью .Net Framework ...
Что в исключение стека вызовов - рамочный код, свой собственный код, что-то еще? –
Это, прежде всего, код рамки, но затем он возвращается обратно в мой собственный код. –
@Joe: Этого можно ожидать, если вы вызываете SetToolTip из обработчика события. –