La cause la plus fréquente de ceci est lorsque vous fermez une fenêtre et qu'une validation se produit qui définit une info-bulle sur un contrôle invisible.
Je n'ai pas débogué dans le code .Net, mais ont une assez bonne idée où l'erreur est jeté dans le code du 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));
}
La condition de résoudre ce problème est très simple, il suffit de cocher si la forme est visible ou comme Benjamin RAIBAUD mentionne au rebut = false avant d'appeler la méthode de contrôle des info-bulle:
C#:
if (!this.Disposing) ttpHoverText.SetToolTip(targetControl, brokenText);
VB.Net:
If Me.Disposing = False Then ttpHoverText.SetToolTip(targetControl, brokenText)
OMI C'est quelque chose qui devrait être gérée par le Framework .Net ...
Ce qui est dans la pile d'appels d'exception - le code-cadre, votre propre code, autre chose? –
C'est avant tout du code de framework, mais ensuite ça saigne dans mon propre code. –
@Joe: C'est normal si vous appelez SetToolTip depuis un gestionnaire d'événement. –