AddHandler先からのコントロール操作

解決


Yusuke  2008-01-03 04:33:55  No: 138531

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


Yusuke  2008-01-03 05:08:44  No: 138532

色々書くのを忘れていました、
VB.NET 2008 EE
Windows XP Home

コードはモジュール内で、操作対照は表示中のFrom1のラベルです


Yusuke  2008-01-06 09:04:38  No: 138533

他掲示板で解決


リンク  2008-01-06 09:48:27  No: 138534

>他掲示板で解決
http://bbs.wankuma.com/index.cgi?mode=al2&namber=12217


我龍院  2008-01-07 16:58:32  No: 138535

#他の掲示板で解決されたようですが、この掲示板で放置されたわけではありません
  少し前からこの掲示板のファイルが壊れていて書き込みが不可能となっていました。
  私の方から管理人さんに連絡して修復していただきました。
  他の掲示板と重複しますが、書き込もうとして書き込めなかった回答をそのまま載せておきます。

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のインスタンスを渡しておいて、モジュールから
フォームを呼び出す時はデリゲートで呼び出します。


Yusuke  2008-01-07 22:13:14  No: 138536

そういうことだったんですか!
わざわざありがとうございます。m(_ _)m

また次の機会にこちらでお世話になります、
その時もよろしくお願いします。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加