■No32961に返信(Hongliangさんの記事) > たしかにKB3023224を入れると再現するようになりますね。 > // このアップデートでWinFormに手が入ってるようだし。 > > とりあえず定番の方法として、BeginInvokeを使ってCloseを次のメッセージに回すのはどうでしょうか。 > > Private Sub MonthCalendar1_DateSelected(sender As Object, e As DateRangeEventArgs) Handles MonthCalendar1.DateSelected > Me.BeginInvoke(New MethodInvoker(Me.Close)) > End Sub
たしかにKB3023224を入れると再現するようになりますね。
// このアップデートでWinFormに手が入ってるようだし。
とりあえず定番の方法として、BeginInvokeを使ってCloseを次のメッセージに回すのはどうでしょうか。
Private Sub MonthCalendar1_DateSelected(sender As Object, e As DateRangeEventArgs) Handles MonthCalendar1.DateSelected
Me.BeginInvoke(New MethodInvoker(Me.Close))
End Sub
環境/言語:[Windows7 Pro 32bit、VB.NET .NET Framework 4] 分類:[.NET]
Form1のボタンクリックでカレンダー画面を表示し、カレンダー画面外をクリックもしくはカレンダーから日付選択時はカレンダー画面を閉じる、というプログラムがあります。
3週間ほど前には動作していたのですが、今日動かすと、なぜかエラーが出るようになってしまいました。
Public Class Form1
Private fCalender As frmCalender
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
If fCalender Is Nothing OrElse fCalender.IsDisposed Then
fCalender = New frmCalender
End If
If Not (fCalender.Visible) Then
fCalender.Show()
End If
End Sub
End Class
Public Class frmCalender
Private Sub frmCalender_Deactivate(sender As System.Object, e As System.EventArgs) Handles MyBase.Deactivate
Me.Close() '←※1 これは問題なし
End Sub
Private Sub MonthCalendar1_DateSelected(sender As System.Object, e As System.Windows.Forms.DateRangeEventArgs) Handles MonthCalendar1.DateSelected
Me.Close() '←※2 ここでエラー発生
End Sub
End Class
※2のエラーメッセージは「オブジェクトの現在の状態に問題があるため、操作は有効ではありません」
この時のMe.AccessibilityObjectは「破棄されたオブジェクトにアクセスできません。オブジェクト名 'frmCalender' です」となっていました。
ソースを一切触っていないのに急にエラーになってしまった理由が分からず、困っています。(その間、WindowsUpdateは行っています。)
よろしくお願いいたします。