J'ai un thread s'exécutant sur un formulaire enfant, je veux activer un contrôle sur le formulaire parent mais je ne peux pas. Cela fonctionne très bien si elle est fait à partir de l'enfant forme thread d'interface utilisateur:Accès aux contrôles entre les formulaires
(FormMain.SetControlPropertyValue (FormMain.RBSQL2005, "Vérifié", true))
mais pas d'un fil conducteur sur le formulaire enfant:
Public Class FormRestoreDB
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim t = New Thread(AddressOf UpdateListView1)
t.Start()
End Sub
Private Sub UpdateListView1()
'FormMain.SetControlPropertyValue(FormMain.RBSQL2005, "Checked", True)
FormMain.RBSQL2005.Checked = True
End Sub
End Class
Public Class FormMain
Delegate Sub SetControlValueCallback(ByVal oControl As Control, ByVal propName As String, ByVal propValue As Object)
Public Sub SetControlPropertyValue(ByVal oControl As Control, ByVal propName As String, ByVal propValue As Object)
If (oControl.InvokeRequired) Then
Dim d As New SetControlValueCallback(AddressOf SetControlPropertyValue)
oControl.Invoke(d, New Object() {oControl, propName, propValue})
Else
Dim t As Type = oControl.[GetType]()
Dim props As PropertyInfo() = t.GetProperties()
For Each p As PropertyInfo In props
If p.Name.ToUpper() = propName.ToUpper() Then
p.SetValue(oControl, propValue, Nothing)
End If
Next
End If
End Sub
End Class
Qu'est-ce que je fais mal?
Merci Hans, ça a du sens. Pourriez-vous me montrer un exemple? Dites comment changer \ mettre à jour un contrôle sur un formulaire parent à partir d'un thread s'exécutant sur l'enfant? – madlan
Ne le faites pas. Soulevez un événement, comme le font tous les contrôles Windows Forms lorsque quelque chose se produit. Le formulaire parent peut s'y abonner et mettre à jour son (ses) contrôle (s). –