0

デリゲートを使用してスレッドからフォーム コントロールを更新する際に問題があります。

私が使っている流れです。

ダッシュボード画面(親 mdi ウィンドウ) -> QuizScreen (子 Mdi ウィンドウ) QuizScreen で 1 回スレッドが開始され、そのスレッド コードがモジュール (server.vb) に保持されます。このスレッドから、コントロールを見つけて更新する必要があります(動的に作成されます)

以下は、スレッド内から呼び出すデリゲートコードです

Public Sub ChangePictImage(ByVal ipaddress As String)
    If Me.InvokeRequired Then
        Dim del As NodeDelegate
        del = AddressOf ChangePictImage
        Me.Invoke(del, ipaddress)
        'Return
    Else
        Me.BackColor = Color.Green
        Me.BackgroundImage = System.Drawing.Image.FromFile(Application.StartupPath & "\images\application-on.png")
    End If


    Dim centerFlowPanel As FlowLayoutPanel = CType(QuizScreen.centerFlowPanel, FlowLayoutPanel)
    Dim computerIconsPanel As FlowLayoutPanel = CType(centerFlowPanel.Controls("computerIconsPanel"), FlowLayoutPanel)
    Dim flowpanel As FlowLayoutPanel = CType(computerIconsPanel.Controls("flow_" + ipaddress), FlowLayoutPanel)
    Dim pictControl As PictureBox = CType(flowpanel.Controls("pict_" + ipaddress), PictureBox)
    pictControl.Image = System.Drawing.Image.FromFile(Application.StartupPath & "\images\application-on.png")
End Sub

次のように、スレッド内からこのデリゲートを呼び出します

threadData.dashboard.ChangePictImage(ipAddress)

お気づきかもしれませんが、dashboard.vb にデリゲート サブを配置しました。

要素を最も深いレベルまで見つけることができます。実際、名前やその他のプロパティを警告することはできますが、何かを設定しようとすると. それは何もしません。

誰でも私を助けることができますか?

4

0 に答える 0