Problème chargement de form

Résolu
lediablo Messages postés 214 Date d'inscription mercredi 26 avril 2006 Statut Membre Dernière intervention 2 août 2012 - 24 juil. 2012 à 03:48
lediablo Messages postés 214 Date d'inscription mercredi 26 avril 2006 Statut Membre Derniè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

2 réponses

Utilisateur anonyme
24 juil. 2012 à 08:27
Bonjour,

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 :
AT(i.ToString)


Bonne prog
3
lediablo Messages postés 214 Date d'inscription mercredi 26 avril 2006 Statut Membre Dernière intervention 2 août 2012
25 juil. 2012 à 02:57
merci beaucoup pour votre réponse banana32 sa fonctionne

Quand on pose une question on est con 5 minutes,Quand on ne la pose pas on le reste toute sa vie
0
Rejoignez-nous