AddHandler先でコントロールの表示・非表示を操作したいのですが
コードは通っているにもかかわらず動作しません(エラー表示もなし)
リフレッシュ等もさせましたが効果はありませんでした
Public Sub コマンド実行の確認()
DOS_KILL = 0
Form3.GroupBox3.Visible = True
hProcess = System.Diagnostics.Process.Start((System.AppDomain.CurrentDomain.BaseDirectory) & "\CPU monitor\Batch folder\000.bat")
hProcess.EnableRaisingEvents = True
AddHandler hProcess.Exited, AddressOf DOS_Exited
End Sub
Private Sub DOS_Exited(ByVal sender As Object, ByVal e As System.EventArgs)
Form1.Label1.Visible = False ←これがうまくいきません
End If
End Sub
色々書くのを忘れていました、
VB.NET 2008 EE
Windows XP Home
コードはモジュール内で、操作対照は表示中のFrom1のラベルです
他掲示板で解決
>他掲示板で解決
http://bbs.wankuma.com/index.cgi?mode=al2&namber=12217
#他の掲示板で解決されたようですが、この掲示板で放置されたわけではありません
少し前からこの掲示板のファイルが壊れていて書き込みが不可能となっていました。
私の方から管理人さんに連絡して修復していただきました。
他の掲示板と重複しますが、書き込もうとして書き込めなかった回答をそのまま載せておきます。
VB2005からまたVB6と同じようにFormのデフォルトインスタンスが復活して、
デリゲートの場合はかえって解かりにくくなったような。(^^;
要するに、他のプログラムの終了時に呼び出されるModuleのインスタンスは、
他のプログラムのスレッドに属する為、別スレッドであるForm1のインスタンスには
直接アクセス出来ません、他のスレッドのインスタンスにアクセスしたい場合は、
デリゲートを使います。
デリゲートは他のクラスのメソドにアクセスするクラスです。
解かりやすいようにノートパッドでやってみます。
フォームに書かれたコード
Public Class Form1
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
ExeNotePad(Me)
End Sub
Public Sub LabelVisible()
Me.Label1.Visible = False
End Sub
End Class
モジュールに書かれたコード
Module Module1
Private Form As Form1
Public Delegate Sub myDelegate()
Public Sub ExeNotePad(ByVal MyForm As Form1)
Dim hProcess As System.Diagnostics.Process
Form = MyForm
hProcess = System.Diagnostics.Process.Start("c:\windows\notepad.exe")
hProcess.EnableRaisingEvents = True
AddHandler hProcess.Exited, AddressOf DOS_Exited
End Sub
Private Sub DOS_Exited(ByVal sender As Object, ByVal e As System.EventArgs)
Form.Invoke(New myDelegate(AddressOf Form.LabelVisible), New Object() {})
End Sub
End Module
モジュールを呼び出すときに呼び出す側のFormのインスタンスを渡しておいて、モジュールから
フォームを呼び出す時はデリゲートで呼び出します。
そういうことだったんですか!
わざわざありがとうございます。m(_ _)m
また次の機会にこちらでお世話になります、
その時もよろしくお願いします。
ツイート | ![]() |