lediablo
Messages postés214Date d'inscriptionmercredi 26 avril 2006StatutMembreDernière intervention 2 août 2012
-
24 juil. 2012 à 03:48
lediablo
Messages postés214Date d'inscriptionmercredi 26 avril 2006StatutMembreDernière intervention 2 août 2012
-
25 juil. 2012 à 02:57
bonjour
j'ai petit problème que je ne n'ai pas compris, j'ai cherché sur internet mais je n'est pas trouvé de solution
j'ai deux form, form1 dans lequel j'ai un richtextbox et un button, dans le code de button il ya :
dim frm as form2 = new form2
frm.test()
et dans form2 il y a une fonction public qui exécute un thread qui remplis le richtextbox dans form1, jusqu’à ici j'espère que tout est claire.
le problème c'est que quand je clic sur le boutton rien ne s'éxécute et le richtextbox ne se remplis pas parcontre si j'ajoute je bout de code tout fonctionne:
frm.visible = true
donc quand le frm est visible le code s'éxécute sans problème et s'il est invisible rien ne se passe.
voici le code de form1
Public Class Form1
Public Sub Button1_Click_1(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim frm As Form2 = New Form2
'frm.Visible = True
frm.test()
End Sub
End Class
et le code de form2
Imports System.Threading
Public Class Form2
Private _threadCalculs1 As Thread
Private Delegate Sub deleg1(ByVal donnee As String)
Private Sub InsererDansText(ByVal donnee As String)
Form1.RichTextBox1.AppendText(donnee)
End Sub
Private Sub AT(ByVal Text As String)
If Me.InvokeRequired Then
Me.Invoke(New deleg1(AddressOf InsererDansText), Text)
End If
End Sub
Public Sub test()
StartThread()
End Sub
Private Sub StartThread()
_threadCalculs1 = New Thread(AddressOf ThrFunc1)
_threadCalculs1.Name = "Thread1"
_threadCalculs1.Start()
End Sub
Private Sub ThrFunc1()
Try
For i = 0 To 1000
AT(i)
Next
Catch ex As Exception
MsgBox(ex.Message)
End Try
End Sub
End Class
j'espère que vous pouvez m'aider
merci d'avance
Quand on pose une question on est con 5 minutes,Quand on ne la pose pas on le reste toute sa vie
Le handle de ta fenêtre form2 n'est pas créé puisque tu ne l'affiches pas.
Il te faut donc rajouter la création du handle dans le constructeur New de la form :
Sub New()
InitializeComponent()
Me.CreateHandle()
End Sub
D'autre part, la sub appelée par le délégué peut être elle même, inutile de faire référence à une autre sub.
Le code devient :
Private Sub AT(ByVal Text As String)
If Me.InvokeRequired Then
Me.Invoke(New deleg1(AddressOf AT), Text)
Else
Form1.RichTextBox1.AppendText(Text)
End If
End Sub
Active Option Strict dans les propriétés du projet, ainsi on écrit :