2

スタックトレースでエラーが発生しました...

System.ObjectDisposedException: Cannot access a disposed object.
Object name: 'Button'.
at System.Windows.Forms.Control.CreateHandle()
at System.Windows.Forms.Control.get_Handle()
at System.Windows.Forms.Control.PointToScreen(Point p)
at System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent)
at System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks)
at System.Windows.Forms.Control.WndProc(Message& m)
at System.Windows.Forms.ButtonBase.WndProc(Message& m)
at System.Windows.Forms.Button.WndProc(Message& m)
at System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
at System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
at System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)

このエラーを生成するコードは....

Friend Sub GoHome(ByVal sender As Form)
  InTransit = True
  sender.Close()
  fMain.Show()
End Sub

.show と .close メソッドの順序を入れ替えただけではエラーになりません

Friend Sub GoHome(ByVal sender As Form)
  InTransit = True
  fMain.Show()
  sender.Close()
End Sub

最初のケースではエラーが発生し、2 番目のケースではエラーが発生しない理由を教えてください。

4

1 に答える 1

0

senderこの場合、とfMain同じオブジェクトですか?

もしそうなら...あなたが呼び出すとき、sender.Closeあなたは事実上 を呼び出しfMain.Closeており、Closeメソッドはそのオブジェクトを舞台裏で破棄しています。その後に呼び出すとfMain.Show、破棄したばかりのオブジェクトで呼び出しているため、エラーが発生します。

または、代わりに...

たぶんsender、子コントロールの1つがオンになっていfMainますか?

を呼び出しsender.Closeて、子コントロールを破棄します。次に、 whichに属する子コントロールで何かfMain.Showをしようとする を呼び出します。破棄したばかりの子コントロールで特定のことをしようとすると、エラーが発生します。fMain

于 2012-02-16T17:38:38.660 に答える