Ich habe eine saubere WindowsFormsApplication-Lösung erstellt, dem Hauptformular eine hinzugefügt und einen Button darauf platziert.Warum wird eine NullReferenceException ausgelöst, wenn zweimal auf eine ToolStrip-Schaltfläche geklickt wird - openFileDialog.showDialog()?
private void toolStripButton1_Click(object sender, EventArgs e)
{
openFileDialog1.ShowDialog();
}
Ich habe nicht ändern andere Eigenschaften oder Ereignisse: Ich habe auch eine OpenFileDialog
, so dass das Click
Ereignis des ToolStripButton
sieht wie folgt hinzugefügt.
Die lustige Sache ist, dass, wenn ich die ToolStripButton
doppelklicke (der zweite Klick muss ziemlich schnell sein, bevor der Dialog öffnet), dann beide Dialoge abzubrechen (oder wählen Sie eine Datei, ist es nicht wirklich wichtig) und dann Klicken Sie in den Client-Bereich des Hauptformulars, ein NullReferenceException
stürzt die Anwendung (Fehlerdetails am Ende des Beitrags angehängt). Bitte beachten Sie, dass das Ereignis Click
implementiert ist, während DoubleClick
nicht ist.
Was noch seltsamer ist, dass, wenn die OpenFileDialog
von jedem Benutzer implementierter Form ersetzt wird, die ToolStripButton
aus Blöcken zweimal angeklickt werden.
Ich verwende VS2008 mit .NET3.5 auf Windows 7 Professional (von MSDNAA) mit den neuesten Updates. Ich habe nicht viele Optionen in VS (nur Schriftgröße, Arbeitsbereich Ordner und Zeilennummerierung) geändert.
Weiß jemand, wie man das löst? Es ist 100% replizierbar auf meiner Maschine, ist es auch auf anderen?
Eine Lösung, die ich mir vorstellen kann, ist das Deaktivieren der Schaltfläche vor dem Aufruf OpenFileDialog.ShowDialog()
und dann die Schaltfläche wieder aktivieren (aber es ist nicht nett). Irgendwelche anderen Ideen?
Und jetzt die versprochenen Fehlerdetails:
System.NullReferenceException wurde nicht behandelt
Message = „Objektverweis nicht auf eine Instanz eines Objekts festgelegt.“
Source = "System.Windows.Forms"
Stacktrace:
bei System.Windows.Forms.NativeWindow.WindowClass.Callback (IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
bei System.Windows.Forms .UnsafeNativeMethods.PeekMessage (MSG & msg, HandleRef HWND, Int32 msgMin, Int32 msgmax, Int32 entfernen)
bei System.Windows.Forms.Application.ComponentManager.System.Windows.Forms.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop (Int32 DwComponentID, Int32 Grund, Int32 pvLoopData)
bei System.Windows.Forms.Application.ThreadContext.RunMessageLoopInner (Int32 Grund, ApplicationContext Kontext)
bei System.Windows.Forms.Application.ThreadContext.RunMessageLoop (Int32 Grund Application Kontext)
bei System.Windows.Forms.Application.Run (Form Mainform)
bei WindowsFormsApplication1.Program.Main() w C: \ Benutzer \ Marchewek \ Desktop \ Workspaces \ Visual \ WindowsFormsApplication1 \ Program.cs: Zeile 20
bei System.AppDomain._nExecuteAssembly (Assembly Baugruppe, String [] args)
bei System.AppDomain.ExecuteAssembly (String assembly, Evidence assemblySecurity , String [] args)
bei Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
bei System.Threading.ThreadHelper.ThreadStart_Context (Object state)
bei System.Threading.ExecutionContext.Run (ExecutionContext ExecutionContext, Context Rückruf, Objektzustand)
bei System.Threading. ThreadHelper.ThreadStart()
Innerexception:
VS-Optionen sind irrelevant. Dies sieht wie ein Fehler im Framework aus. – SLaks
Ich konnte Ihr Problem nicht mit VS2008 unter W2K3 und VS2010 unter W2K8 replizieren. –
Repro auch nicht mit XPsp3, VS2008 und .NET2.0 oder 3.5 – Andy