none
Fenetre ne veut pas revenir à windowstate normal après être minimisée RRS feed

  • Question

  • Bonjour

    J'ai une form

    Il y a un timer qui fait une recherche toutes les minutes

    Lorsqu'un information est trouvée, il l'affiche sur form2 qui me sert de msgbox personnelle au lieu d'afficher le text trouvé sur un msgbox régulier

    J'ai 5 form comme celle-là...

    Je les fait ouvrir comme ça :

    form2.show
    form2.label1.text = "Information trouvée"

    Des fois, les 5 forms sont ouvertes en même temps que ma form1 principale...

    Alors je les minimise pour regarder les informations plus tard...

    Lorsque je désire les voir, je clique sur une form et elle ne veut pas se mettre en windowstate normal... elle est bloquée dans la barre des tâches windows 7

    Ça le fait avec plus d'une form!

    Merci!

    vendredi 4 décembre 2015 23:15

Réponses

  • Cela fait trop d'inconnues pour comprendre ce qui se passe vraiment.

    Il semble que les problèmes de Thread n'ont pas été adressé.

    Pour pouvoir continuer il faut simplifier et poster tout le code en question.

    Bon courage


    Cyrille Precetti
    Bonne Année! Happy New Year!

    • Marqué comme réponse Peter_ZZZZZ vendredi 8 janvier 2016 22:57
    jeudi 7 janvier 2016 08:51
  • Salut

    Au lieu de vous envoyer un code épuré et de vous faire travailler à ma place.. j'ai décidé d'essayer mon code en l'épurant GRANDEMENT

    Alors j'ai enlevé tout le code dans chacun des Load des 5 form Rappels

    Le bug était encore là

    J'ai enlevé tout le code dans le timer qui appel ces forms là et j'ai laissé uniquement rappels.show, rappel2.show etc jusqu'à rappels5

    Le bug est parti

    Donc je vais remettre tout le code et enlever ligne par ligne pour savoir où est la source du bug...

    Ce qui est difficile à gérer, c'est que le code fonctionne... mais pas en deuxième batch...

    Je trouve quelles lignes qui font buggé et je vous reviens avec ça!! Merci  :)  :)  :)


    La vie est belle!

    • Marqué comme réponse Peter_ZZZZZ vendredi 8 janvier 2016 22:57
    vendredi 8 janvier 2016 17:53
  • Salut!!!

    Finaly!!!!  :)

    Je suis super content...

    Grace à votre question sur le fait qu'il y avait trop d'inconnu et que vous vouliez le code épuré.. j'ai pu trouvé le bug

    Voici le code qui faisait buggé :

    if rappels1Bool = true then
    rappels2.top = rappels1.top + 50
    end if

    Pourquoi il y avait un bug quand le      for x = 0  to 1000 passait une deuxième fois.. ?

    C'est que les form qui avaient déjà été affichées était minimisé... alors quand je demande que le top d'une prochaine form soit 50 de + que la form précédente et que celle-ci est minimisée... sont top est : soit 0 ou infini ou...  : )

    voilà!!!!!!

    Super

    Maintenant.. dite moi comment je peux voter pour vous

    et...

    voici un autre bug si vous avez envie d'y participer!!

    https://social.msdn.microsoft.com/Forums/fr-FR/35ee5aca-1109-454e-a8d3-9f9c8062b618/label-qui-ne-saffiche-pas-au-bon-endroit?forum=vbasicfr

    Merci encore pour votre support.. ce bug durait depuis déjà très longtemps et ça fera du bien de pouvoir avoir accès au message qui apparaisse en 2ième et 3ième batch!!!

    Au plaisir


    La vie est belle!

    vendredi 8 janvier 2016 22:57

Toutes les réponses

  • Bonjour, Peter_ZZZZZ,

    Veuillez consulter le thread en bas:
    Modaless "form.Show()" hangs on the Winform thread
    Je vous remercie par avance de votre retour.

    Cordialement,
    Teodora

    Votez! Appel à la contribution TechNet Community Support. LE CONTENU EST FOURNI "TEL QUEL" SANS GARANTIE D'AUCUNE SORTE, EXPLICITE OU IMPLICITE. S'il vous plaît n'oubliez pas de "Marquer comme réponse" les réponses qui ont résolu votre problème. C'est une voie commune pour reconnaître ceux qui vous ont aidé, et rend plus facile pour les autres visiteurs de trouver plus tard la résolution.

    samedi 5 décembre 2015 21:46
    Modérateur
  • Bonjour

    Merci pour la réponse

    J'ai bien regardé

    Après analyse... j'ai constater que :

    J'ai

    Rappels, rappels2, rappels3, rappel4, et rappels5

    seulement rappel4 et 5 ne voulait plus remonter 

    alors j'ai supprimer rappels4 et 5 et j'ai pris le code de rappels3 et je l'ai copié dans les 2 nouvelles forms que j'ai renommé rappels4 et 5 et j'ai refait les graphiques

    Le probème a été résolu

    Merci de m'avoir répondu et permi de mieux réfléchir à 2 que seul!!  : )

    dimanche 6 décembre 2015 18:29
  • Bonjour

    J'avais marqué comme résolu mais non.. le problème est revenu

    Voici ce que j'ai fait... comme le problème était la form 4 et 5, j'ai reprogrammé pour que ça arrête à 3 afin de ne plus utiliser les form4 et 5 ... je m'en tient à 3 messagebox personnnalisées

    Mais maintenant, le problème est apparu à la form3 ce qui n'était jamais arrivé

    J'ai eu un autre bug et ce n'était pas mon code l'erreur.. c'était une resource qui causait le bug

    Alors dans ce cas-ci je crois aussi que ce n'est pas le code qui est le bug puisqu'il y a 5 forms identiques et que seulement les form4 et 5 ne revenait pas windowstate normal et maintenant que j'ai changer le code pour que seulement les form1-2-3 fonctionnent, le bug s'applique à la form3

    Voulez-vous quand même mon code et si oui lequel?

    Merci


    La vie est belle!

    dimanche 13 décembre 2015 21:48
  • Peter,

    Puisque des Timers sont utilisés cela ressemble à des problèmes de Threading.

    Peux-tu simplifier tout ton code et poster les éléments marquant pour que l'on regarde?

    En particulier les timers et les déclarations d'actions sur les forms.


    Cyrille Precetti

    mardi 15 décembre 2015 10:38
  • Allo Cyrille

    voici la partie du code qui est dans le timer qui s'exécute à toutes les minutes et qui appel les form1 à 5)

    'Il y a 5x ce code en ligne mais au lieu de rappels pour les autres c'est rappels2.visible, rappels3.visible, rappel4.visible et rappel5.visible
    
    
    'Si rappels n'est pas utilisé.. alors L'utiliser
    If Rappels.Visible = False Then
                                                    
    'Le titre du rappel
    Rappels.Label2.Text = "Reminder - Will display in " + avantNombre.ToString + " " + avantPeriode
    
    'si le rappel doit être répété ou non
    Rappels.CheckBox1.Text = "Remind me again"
    
    'Le titre de la form
    Rappels.Label1.Text = rappel
    
    'S'il y a un mot de passe, on enable pas la checkbox
    If rappelBarre = True Then
    
    Rappels.CheckBox1.Enabled = False
    
    End If
    
    Rappels.nomGardeRappel1 = rappel
    Rappels.anneeGardeerappel1 = Me.Utilisateur1DataSet.calendrierRappels.Rows(x).Item(4)
    
    Rappels.moisGarderappel1 = Me.Utilisateur1DataSet.calendrierRappels.Rows(x).Item(3)
    
    Rappels.jourGardeRappel1 = Me.Utilisateur1DataSet.calendrierRappels.Rows(x).Item(2)
                           
    Dim longueur1 As Short = Rappels.Label1.Left + Rappels.Label1.Width + 35
                           
    GoTo finRappels
    
    End If
    as-tu besoin de d'autres code?  :)


    La vie est belle!

    mercredi 16 décembre 2015 15:36
  • Il faudrait savoir comment les formes sont créées et affichées.

    Vraiment "Goto finRappels"??? est-ce que c'est du .NET?


    Cyrille Precetti

    mercredi 16 décembre 2015 18:11
  • J'utilise VS express pour desktop ... merci de me poser la question...

    Quand vous dites comment les forms sont créées et affichées vous voulez dire quoi précisément.. tout ce qui me vient à la tête c'est : Load ou designer...?

    Pierre



    La vie est belle!

    mercredi 16 décembre 2015 18:25
  • Je voudrai savoir comment sont crées les Forms rappel1... programmatiquement comme:

    If rappel1 Is Nothing Then
                    rappel1 = New Form
                    rappel1.Size = New System.Drawing.Size(100, 100)
                    rappel1.WindowState = FormWindowState.Maximized
    
                    Dim MyTextbox As New TextBox
                    MyTextbox.Name = "TextBox1"
                    MyTextbox.Location = New Point(40, 10)
    
                    rappel1.Controls.Add(MyTextbox)
                    rappel1.Show()
                End If

    ou alors avec le designer?

    Quels sont les déclencheurs de l'affichage des formes? et l'écriture dans le Label1 ... parce qu'il y ap eut être des conflits entre le thread principal de la Form1 et les thread des formes rappels...

    Pour info j'ai testé avec 5 formes appelées aléatoirement avec un événement qui appelle les formes avec Invoke:

      Private Sub OpenFormEvent(sender As Object, e As EventArgs)
            If Me.InvokeRequired Then
                Dim args As Object() = {sender, e}
                Me.BeginInvoke(New EventHandler(AddressOf OpenFormEvent), args)
            Else
    
                If _booRappel1 = False Then
                    'lancement forme1 
                    _booRappel1 = True
                    Rappel1.Show()
    
                ElseIf _booRappel2 = False
                    _booRappel2 = True
                    Rappel2.Show()
    
                ElseIf _booRappel3 = False
                    _booRappel3 = True
                    Rappel3.Show()
    
                ElseIf _booRappel4 = False
                    _booRappel4 = True
                    Rappel4.Show()
    
                ElseIf _booRappel4 = False
                    _booRappel4 = True
                    Rappel4.Show()
    
                ElseIf _booRappel5 = False
                    _booRappel5 = True
                    Rappel5.Show()
    
                End If
                'Ici on écrit aléatoirement
                Select Case GetRandom(1, 5)
                    Case 1
                        If _booRappel1 = True Then
                            Rappel1._NbRappel += 1
                            Rappel1.Label1.Text = "1 : utilisé " & Rappel1._NbRappel & " " & Date.Now.ToString("HH:mm:ss:ff")
                        End If
                    Case 2
                        If _booRappel2 = True Then
                            Rappel2._NbRappel += 1
                            Rappel2.Label1.Text = "2 : utilisé " & Rappel2._NbRappel & " " & Date.Now.ToString("HH:mm:ss:ff")
                        End If
                    Case 3
                        If _booRappel3 = True Then
                            Rappel3._NbRappel += 1
                            Rappel3.Label1.Text = "3 : utilisé " & Rappel3._NbRappel & " " & Date.Now.ToString("HH:mm:ss:ff")
                        End If
                    Case 4
                        If _booRappel4 = True Then
                            Rappel4._NbRappel += 1
                            Rappel4.Label1.Text = "4 : utilisé " & Rappel4._NbRappel & " " & Date.Now.ToString("HH:mm:ss:ff")
                        End If
                    Case 5
                        If _booRappel5 = True Then
                            Rappel5._NbRappel += 1
                            Rappel5.Label1.Text = "5 : utilisé " & Rappel5._NbRappel & " " & Date.Now.ToString("HH:mm:ss:ff")
                        End If
    
                End Select
    
            End If
        End Sub

    Pas de soucis sur la minimization.

    Si les formes sont fermées et que l'on veut qu'elles réapparaissent il faut gèrer l'event .Closing et mettre le boolean à false....


    Cyrille Precetti


    mercredi 16 décembre 2015 20:04
  • Salut

    Pour le label voici 

    'Label1 '

    Me.Controls.Add(Me.Label3)

    Friend WithEvents Label3 As System.Windows.Forms.Label Me.Label1.AutoSize = True Me.Label1.BackColor = System.Drawing.Color.Transparent Me.Label1.Font = New System.Drawing.Font("Arial", 11.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) Me.Label1.Location = New System.Drawing.Point(57, 78) Me.Label1.Name = "Label1" Me.Label1.Size = New System.Drawing.Size(241, 18) Me.Label1.TabIndex = 21 Me.Label1.Text = "Faire pâté chinois gdfrety lkldzjlk" Me.Label1.TextAlign = System.Drawing.ContentAlignment.MiddleCenter

     


    Pour la création des forms... je ne les trouve pas... même pas dans le designer.. 

    Moi j'appel la form de cette façon comme indiqué dans le code ci-haut : Rappels.Show

    Si vous savez exactement où est situé la création de cette form... je chercherai encore bien entendu  : )

    Vous m'avez écrit un code qui fonctionnait... j'aimerais vous dire que mon code fonctionnait aussi... même qu'il y  5 form identiques, ce n'est qu'à un moment donné que le bug est arrivé... alors moi aussi ça fonctionnait avant

    en plus... le bug n'était qu'au form 4 et 5... je changer le code pour utiliser uniquement les 3 premières et le bug est apparu à la troisième.. Merci de m'aider!! C'est important  : ) : ) C'est un gros programme important pour nous!!!


    La vie est belle!

    vendredi 18 décembre 2015 18:02
  • Si vous faites

    Rappels.Show

    alors c'est que la forme Rappels est bien définie quelque part auparavant.

    Vous n'avez pas idée où?

    Si les tentatives d'écriture dans les formes n'utilise Invoke alors vous aurez des problèmes de Thread et c'est peut être votre problème. Si le Thread principal n'est pas trop chargé, cela fonctionne, si il y a une queue alors vous voyez le problème de la forme qui reste inactive. Cela dépend entièrement de ce qui se passe dans la queue des événements.


    Cyrille Precetti

    vendredi 18 décembre 2015 18:33
  • J'ai cherché partout dans mon programme

    et J'ai cherché sur google...

    Je ne trouve pas où se crée les forms dans visual basic

    Pour le invoke et les threads :

    Y aurait-il un moyen de vider les threads par code... ou de faire quelque chose relié aux threads à la main par code

    et pour le invoke.. puis-je l'ajouter à la main dans load ou quelque chose d'autre avec invoke?


    La vie est belle!

    vendredi 18 décembre 2015 19:45
  • En fait juste le test sur InvokeRequired dans les premières lignes de la gestion de l'événement qui communique avec les formes comme dans mon exemples.

    C'est bizarre de ne pas avoir de déclaration sur les forms appelées.... Un search sur Rappels peut être? caché dans un event handler?


    Cyrille Precetti

    vendredi 18 décembre 2015 20:04
  • ok je viens d'ajouter le nécessaire :

    sender As Object, e As EventArgs

    dans les parenthèse de ma sub

    et :

      If Me.InvokeRequired Then
                Dim args As Object() = {sender, e}
                Me.BeginInvoke(New EventHandler(AddressOf OpenFormEvent), args)
            Else

    avant l'appel des rappels 1 à 5...

    j'utilise le programme 1 jour ou 2 et on va savoir bientôt ce qui en est!! : ) Merci!!!


    La vie est belle!

    vendredi 18 décembre 2015 20:42
  • Salut

    Malheureusement et heureusement

    Malheureusement ça n'a pas fonctionné pour invoke (pas grave.. je garde espoir en nous) mais... j'ai découvert ceci

    (heureusement)

    Lorsque ma sub RechercheDeRappels trouve 5 rappels en même temps avec un for next et affichent les 5 forms... il n'y a pas de problème. 

    si je ferme 2 forms sur 5 (disons rappel1 et rappel4)... la sub RechercheDeRappel en trouve 2 autres 5 minutes plus tard... mais eux.. ne veulent pas aller à windows state normal... Pourquoi ceux qui ont été ouvertes par cette sub 5 minutes après la découverte des premières forms ne vont pas à windowstate normal? et que les 3 premières n'ont pas de bug?

    J'ai ouvert la form calculatrice ainsi que la form Loupe et la form principale est ouverte donc plein de forms sont ouvertes...

    Toutes les forms se minimisent et vont à windowsate normal sauf les 2 qui ont été trouvé par la sub RechercheDeRappel 5 minutes après les 3 premières...

    Le bug ne s'appliquent pas à toutes les forms du programmes... il s'applique uniquement au forms ouverte par la sub RechercheDeRappel et trouvé en 2ième batch

    C'est une  bonne découverte mais comment trouvé le lien qui unie ces 5 forms dans le programme et non toutes les autres forms du programme

    : )



    La vie est belle!

    vendredi 18 décembre 2015 21:32
  • Quand vous dites "je ferme 2 forms..." est-ce que vous utilisez X (close) ou - (minimize)?

    Si vous les fermez vraiment alors elles n'existent plus.... il faut les recréer... testez l'existence et la position de vos formes, par exemple:

    Dim frmCollection = System.Windows.Forms.Application.OpenForms If frmCollection.OfType(Of Form2).Any Then frmCollection.Item("Form2").Activate()

    'ou alors maximized ou autre .visible...etc Else 'La forme n'existe plus il faut la recréer... Dim newForm2 = New Form2 newForm2.Show() End If



    Cyrille Precetti

    samedi 19 décembre 2015 10:15
  • En fait quand je dis je les fermer c'est à dire close...

    Pour les recréer... je fais show... et visual basic les recrée d.une façon que nous n'avons pas trouvé encore...

    Donc 

    For x = 0 to 1000 'cherche et trouve quelque chose

    if rappels1.visible = false then Rappels1.show

    Rappels1.label1.text = "Quelque Chose"

    end if

    if rappels2.visible = false then

    rappels2.show

    rappels2.label1.text = "Quelque chose"

    end if

    'Etc jusqu'à rappels5

    next

    il y  a 5 rappels de trouvés

    les 5 se minimisent et retourne à windostate normal sans problème sans bug!!

    je close la 2 et la 5

    le for x se refait et en trouve 2 autres... ce qui fait encore 5 en tout mais... 

    uniquement les 3 qui provenaient de la première batch vont retourner à windowstate normal mais pas les 2 nouvelles trouvées, elles sont prises dans la barre des tâches en bas.. minimisées

    je ramène l'info que j'ai ouvert plusieurs autres forms du programme en même temps et tout va bien.. uniquement celles qui proviennent de ce que je viens d'illustrer en haut "buguent"!

    Selon moi.. quelque chose unie ces 5 forms ensemble comme des mélanges de noms ou de variable parce que j'ai pris rappel1 pour faire les 4 autres rappels... je vais aller voir!! En tout cas... vos questions m'aident beaucoup.. je précise la situation de plus en plus... et j'essaie des trus avec vous.. c'est super!


    La vie est belle!

    samedi 19 décembre 2015 20:58
  • Le noms des classes et des varibles sont uniques.... je vais vous laisser trouver des hypothèses... au moins on a préciser la situation !!!

    Pourquoi uniquement les form apparaissant après la première batch et uniquement celle créer à partir du for x ne vont pas à windowstate normal.. qu'est-ce ces 2 autres forms trouvées ont que les autres froms de mon programme n'ont pas? je pensais que c'était un nombre élevé de form ouverte ensemble qui faisait le bug mais non... uniquement celle trouvées dans l,exemple ci-haut en deuxième batch on un bug!

    Merci!!

    Pierre


    La vie est belle!

    samedi 19 décembre 2015 21:48
  • JLorsque la forme a été fermée par le bouton X, elle est Closed, elle n'est pas dans un windowstate.minimized.

    Je ne vois pas pourquoi les formes en question n'ont pas toutes le même comportement. Mais il faut que vous regardiez à faire le code de chaque fenêtre comme ceci:

    Public Sub New()
    
            'Call to MyBase.New must be the very first in a constructor.
            MyBase.New()
    
            ' This call is required by the Windows Form Designer.
            InitializeComponent()
    
            ' Add any initialization after the InitializeComponent() call.
            Label1.Text = "Rappel1"
    
        End Sub
        Public Sub New(ByVal theText As String)
    
            'Call to MyBase.New must be the very first in a constructor.
            MyBase.New()
    
            ' This call is required by the Windows Form Designer.
            InitializeComponent()
    
            ' Add any initialization after the InitializeComponent() call.
            Label1.Text = theText
    
        End Sub
    
        Private Sub Rappel1_Closing(sender As Object, e As CancelEventArgs) Handles Me.Closing
            Form1._booRappel1 = False
            'Debug.Print("Closing _boorappel1=" & Form1._booRappel1)
        End Sub

    et le invoke pour contrôler ce qui se passe:

     Private Sub OpenFormEvent(sender As Object, e As EventArgs)
            If Me.InvokeRequired Then
                Dim args As Object() = {sender, e}
                Me.BeginInvoke(New EventHandler(AddressOf OpenFormEvent), args)
            Else
                If _booRappel1 = False Then
                    'lancement forme1 
                    _booRappel1 = True
                    Rappel1.Show()
                ElseIf _booRappel2 = False Then
                    _booRappel2 = True
                        Rappel2.Show()
                    ElseIf _booRappel3 = False
                        _booRappel3 = True
                        Rappel3.Show()
                    ElseIf _booRappel4 = False
                        _booRappel4 = True
                        Rappel4.Show()
                    ElseIf _booRappel4 = False
                        _booRappel4 = True
                        Rappel4.Show()
                    ElseIf _booRappel5 = False
                        _booRappel5 = True
                    Rappel5.Show()
                End If
                'Ici on écrit aléatoirement
                Select Case GetRandom(1, 5)
                    Case 1
                        If _booRappel1 = True Then
                            Rappel1._NbRappel += 1
                            Rappel1.Label1.Text = "1 : utilisé " & Rappel1._NbRappel & " " & Date.Now.ToString("HH:mm:ss:ff")
                        End If
                    Case 2
                        If _booRappel2 = True Then
                            Rappel2._NbRappel += 1
                            Rappel2.Label1.Text = "2 : utilisé " & Rappel2._NbRappel & " " & Date.Now.ToString("HH:mm:ss:ff")
                        End If
                    Case 3
                        If _booRappel3 = True Then
                            Rappel3._NbRappel += 1
                            Rappel3.Label1.Text = "3 : utilisé " & Rappel3._NbRappel & " " & Date.Now.ToString("HH:mm:ss:ff")
                        End If
                    Case 4
                        If _booRappel4 = True Then
                            Rappel4._NbRappel += 1
                            Rappel4.Label1.Text = "4 : utilisé " & Rappel4._NbRappel & " " & Date.Now.ToString("HH:mm:ss:ff")
                        End If
                    Case 5
                        If _booRappel5 = True Then
                            Rappel5._NbRappel += 1
                            Rappel5.Label1.Text = "5 : utilisé " & Rappel5._NbRappel & " " & Date.Now.ToString("HH:mm:ss:ff")
                        End If
    
                End Select
    
            End If
        End Sub
    Je n'ai pas réussi à reproduire ce que vous avez, toutes les fenêtres reviennent lorsque je les rappelle avec un .Show.


    Cyrille Precetti

    dimanche 20 décembre 2015 00:28
  • : ) oups... : )

    je pense qu'on s'est mal compris.. ce n'est pas grave...

    ce n'est pas lorsque je les remets à show qu'il y a un problème

    1. le        for x = 0 to 1000        trouve 5 réponses positives

    2. il les affiche avec rappels1, rappels2, rappels3, rappels4 et rappels5

    Toutes ces forms se minimisent et reviennent à windowstate normal

    3. Je close rappels2 et rappels5 par exemple

    4. le programme refait le           for x = 0 to 1000      2 minute plus tard dans un timer

    5. il y a 2 autres réponses positives. Alors la form rappels2 et la form rappels5 qui étaient closed sont maintenant réouvert avec show.. et ce sont ces 2 form réouvertes qui après avoir été minimisées, ne veulent plus se remmettre à windowstate normal

    Toutes les autres form ouvertes se minimisent et reviennent à windowstate normal (la forme Loupe, la forme calculatrice, la form import/export, les form rappels1, rappels3, rappel4... sauf les 2 forms qu ont été trouvé par le       for x        2 minute après (la form rappels2 et la form rappels5)

    Si vous désirez reproduire ceci, vous pourriez mettre 15 données dans une base de donnée, mettre un       for x = 0 to 14        dans un timer qui, à chaque 2 minute fera une recherche aléatoire 

    for x = 0 to 14 'cette première ligne de code n'est pas le bon code pour randomize c'est plutôt une explication logique 'Prendre une lettre au hasard dim caracter as char = randomize (a, b, c, d, e, f) if database.row(x).item(0).contains(caracter) then 'Si tous les rappels sont déjà utilisés if rappels1.visible = true and rappels2.visible = true and rappels3.visible =true and rappels4.visible = true and rappels5.visible = true then msgbox("Vous avez des rappels en attente") exit for

    end if 'Prendre le premier rappel de libre if rappels1.visible = false then rappels1.label1.text = database.row(x).item(0).tostring goto suite end if if rappels2.visible = false then rappels2.label1.text = database.row(x).item(0).tostring goto suite end if if rappels3.visible = false then rappels3.label1.text = database.row(x).item(0).tostring goto suite end if if rappels4.visible = false then rappels4.label1.text = database.row(x).item(0).tostring goto suite end if if rappels5.visible = false then rappels5.label1.text = database.row(x).item(0).tostring goto suite end if end if suite : next


    Lorsque le      for x        trouvera la première fois 1, 2 ou 3 rappels aléatoirement... minimisez-les et cliquez dessus pour les remmettre à windostate normal

    Quand le timer refera le        for x      2 minutes plus tard, il en trouvera d'autres...  et ce sont ces nouvelles forms rappels d'ouvertes qui ne veulent pas se remettre à windowstate normal après avoir été minimisée... Celles qui ont été ouvertes dans la deuxième batch du      for x

    Et les première qui ont été trouvé dans le premier passage du timer n'auront jamais le bug... en fin... chez moi c'est comme ça

    : )

    Merci


    La vie est belle!

    dimanche 20 décembre 2015 04:27
  • Le comportement des fenêtres Rappels et contrôlé dans les événements.

    Pour comprendre pourquoi la fenêtre ne revient pas à Normal mettez ceci dans le code de la feuille Rappel1:

     Private Sub Rappel1_Resize(sender As Object, e As EventArgs) Handles Me.Resize
            'Vérification de l'état de la Forme
            If Me.WindowState = FormWindowState.Minimized Then
                ' the form has been minimized, insert your code here
                Debug.Print("Rappel1 minimisée.")
            ElseIf Me.WindowState = FormWindowState.Normal Then
                Debug.Print("Rappel1 normale.")
            End If
        End Sub

    et vérifez que l'évenement Resize est bien appelé.


    Cyrille Precetti

    dimanche 20 décembre 2015 16:32
  • Salut

    Merci

    Alors... j'ai fait apparaitre 3 rappels... rappels1, rappels2 et rappels3 sont apparus en même temps

    Le resize est appelé correctement

    J'ai fermé rappels3 avec close

    2 minutes plus tard, un autre rappels est apparu sur Rappels3 mais impossible de le remettre à windowstate normal et la sub resize n'est pas appelé.. je confirme cela!!

    Donc si rappels3 apparait dans la première batch trouvée, le resize est appelé mais s'il arrive dans une deuxième batch.. le resize n,est pas appellé et il y a le bug!

    : )



    La vie est belle!

    dimanche 20 décembre 2015 18:24
  • Alors il est probable que la forme Rappels3 n'est pas trouvée. Est-ce qu'elle est dans la liste des formes de l'application dans la barre des tâches comme cela:

    Maintenant regardez si la forme existe encore avec quelque chose comme cela:

     Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
            Dim strListeDesFormes As String = ""
            Une collection de forme pour la liste des formes ouvertes
            Dim myForms As FormCollection = Application.OpenForms
            'On concatène les noms des formes dans un string
            For Each frmName As Form In myForms
                strListeDesFormes &= frmName.Name.ToString & " " & frmName.WindowState & Environment.NewLine
            Next
            'Affichage dans une RichTextBox
            AfficheDansRTB("Info", strListeDesFormes)
    
        End Sub

    Pour moi cela donne ceci:

    0 pour fenêtre maximised et 1 pour minimized. Dans cet exemple la forme Rappel3 est minimized.

    Je pense vraiment que c'est un problème de Thread...


    Cyrille Precetti

    dimanche 20 décembre 2015 18:47
  • Excellent Cyrille

    Voici ce que ça donne

    AujourdHuiFrm c'est la form principale d'ou j'appelle la Sub que vous m'avez demandé (elle est a windowstate normal)

    Rappel1 et Rappel2 : sont apparu du       for x =          dans la première batch, ils n'ont pas de bug et son minimisés

    Rappel3 et rappel4 sont apparu dans la deuxième batch et elles ont un bug

    Oui elles apparaissent dans la barre des tâches comme si elles étaient minimisées mais au fond.. votre sub nous indique qu'elles sont windowstate normal... donc je clique dessus et elles n'apparaissent pas à l'écran.. elles sont uniquement dans la barre des tâches

    Super! J'attends vos conseils  lol  : )


    La vie est belle!

    dimanche 20 décembre 2015 20:43
  • Donc....il y a un problème dans les événements de minimisation des formes.

    J'ai tracé la forme Rappel1 pour New, Activated, Closing, Resized, Closed, Load

    Voila les événements dans l'ordre:

    Au lancement:

    Rappel1 Resize normale.
    Rappel1 New()
    Rappel1 Load
    Rappel1 Activé

    Minimisée avec le -:

    Rappel1 Activé
    Rappel1 Resize minimisée.

    Cliquée dans la barre des tâches:

    Rappel1 Activé
    Rappel1 Resize normale.

    Fermée:

    Rappel1 Activé
    Rappel1 Closing
    Rappel1 Closed.

    et rappelée par le programme sur un événement:

    Rappel1 Resize normale.
    Rappel1 New()
    Rappel1 Load
    Rappel1 Activé

    L'ordre de Resize avant le New est peut être contrintuitif.

    Cependant: est-ce qu'il y aurait des choses qui se passe dans le Resize qui ne peuvent avoir lieu parce que non initialisé par le New ou le Load?


    Cyrille Precetti

    Cliquez le Vote si la contribution est utile :)




    dimanche 20 décembre 2015 21:17
  • Juste pour être certain que l'on parle de la même chose

    Quand vous dites qu'il y a un problème de minimisation...

    c'est que lorsque la form Rappels3 est    .show       elle apparaît dans la barre des tâches, elle est considéré comme windowstate normal mais n'apparaît pas "sur" le desktop...

    Ce ne serait pas plutôt un autre problème que la minimisation puisqu'elle n'apparaît pas du tout sauf dans la barre des tâches avant même que l'on essaie de la minimiser? ce ne serait pas un problème relié à l'apparition de celle-ci tout court?


    La vie est belle!

    dimanche 20 décembre 2015 21:27
  • Vous avez raison. Mais la question est quel sont les events provoqués par le Show?

    Lorsque la fenêtre est recrée les events suivant arrivent dans cet ordre:

    Rappel1 Resize normale.
    Rappel1 New()
    Rappel1 Load
    Rappel1 Activé

    Donc c'est "normal" que la fenêtre soit en windowstate.Normal... mais le reste n'arrive pas.

    Pouvez vous faire le debug.print pour voir si New, puis Load, puis Activated sont passés?


    Cyrille Precetti



    dimanche 20 décembre 2015 21:38
  • Bonjour

    J'ai mis des msgbox au lieu des debug parce que je ne vois pas où le debug apparaît et le résultat est très intéressant vous allez voir

    Aussi, je n'ai pas de new dans les événements... alors je n'ai pas tracké cela mais je ne pense pas qu'avec nos résultats cela dérange

    Voilà...

    À l'ouverture du programme, la form3 se resize 2x (n'oublions pas que j'ai des msgbox au lieu des debug donc je vois le nombre de fois que ça arrive)

    Je fais appraitre rappels1 et rappels2 en première batch

    Lorsque la form Rappels3 apparait en deuxième batch (donc avec le bug) elle :

    Se resize 2x

    Se load 1x

    on la voit apparaître (ce qui n'arrive pas si on ne met pas de msgbox car cela va trop vite)

    Elle est Activate 18x

    Et.... Il y a un resize (elle va se loger dans la barre des tâches)... (je rappel qu'elle est considéré comme windowstate normal selon le test que nous avons fait)

    Donc si on ne met pas de msgbox, on ne la voit pas apparaitre alors qu'en fait elle load, elle apparait en milliseconde elle s'active 18x puis fait un resize vers la barre des taches sans toutefois devenir windowstate minimised!!!  : )

    P.S.

    Comment je fais pour cliquer votre vote  ; )


    La vie est belle!

    lundi 21 décembre 2015 14:45
  • Alors je pense que Activate 18x il doit y avoir quelque chose qui plante. L'apparition dans la barre des tâches est normale: la forme y apparait si elle est maximized ou minimized.

    Mais dans votre cas la forme disparait...

    Alors, bêtement est-ce que la taille de la forme est mise à 0,0? aucune idée ce que cela ferait...

    Qu'est ce qui se passe dans le Resize, ou plutot quels sont les contrôles qui sont modifiés pour que cela arrive 18x?

    Est-ce qu'il y a du code dans le sub de l'événement Resize?


    Cyrille Precetti


    Si utile on clique ici:
    lundi 21 décembre 2015 15:01
  • J'ai vérifié la taille à l'aide d'un bouton et d'un label.. la taille n'est pas de 0,0

    Il n'y a pas de code dans le resize

    J'ai mis un bouton rappels3.visible  qui passe de false à true

    Dans la barre des tâches il disparait et réaparait mais ne veux pas aller à windowstate normal donc, il est sensible à visible change mais ne s'affiche pas

    Vous me dites : 

    quels sont les contrôles qui sont modifiés pour que cela arrive 18x?

    Moi :

    Je ne sais pas comment avoir cette réponse

    J'aimerais ramener l'information que le rappels3 s'est montrer une milliseconde, il disparait et est considéré comme windowstate normal... et comme ce n'est pas le visible puisque je viens de le tester... qu'est-ce qui peut faire qu'une forme disparaît aussitôt qu'elle est apparu, qu'elle s'est loger dans la barre des tâches et qu'elle est toujours considéré comme windowstate normal sans que ce soit le visible qui aille un rapport?

    Je vous laisse aussi trouver vos propres hypothèses  : )


    La vie est belle!

    lundi 21 décembre 2015 19:22
  • Vous pourriez nous dire qu'est ce qu'il y a vraiment dans la forme Rappel3: capture écran?

    Egalement, quels sont les événements qui provoquent l'affichage dans Rappel3?

    Si 18 événements arrivent rapidement pour modifier Rappel3 cela me fait vraiment penser à un conflit de Thread. Peut on reprendre ce qui déclenche l'affichage sur Rappel3?

    Car un Delegate sur cette fonction pourra peut être résoudre le problème.


    Cyrille Precetti

    lundi 21 décembre 2015 22:25
  • Voici ce qu'il y a sur la form Rappels3 :


    Quand vous me dites quels sont les événements qui provoquent l'affichage de rappels3 je ne comprends pas... 

    Ce qui déclanche l'affichage de rappels3 c'est un timer qui passe toutes les minutes, il y a un      For x = 0 to 1000       qui trouve des infos.... 

    For x = 0 to 1000

    'Recherche d'info

    'Info trouvé

    If Rappels3.visible = false then rappels3.show rappels3.label1.text = "Info trouvé" end if

    Pour le delegate.. en haut de public class j'ai écrit :

    Delegate Sub verifierDansLaBaseDeDonneesRappelsUtilisateur1(sender As Object, e As EventArgs)

    Cette sub est celle qui est appelée par le timer à chaque minute et qui contient le     for x = 0  to 1000

    : )

    Merci


    La vie est belle!


    mardi 22 décembre 2015 00:33
  • Il y a des problèmes avec la façon de faire dans le code que vous montrez:

    For indexX = 0 To 1000
                'Recherche d'info
                'Si l'info est trouvée
                If Rappels3.visible = False Then
                    rappels3.show
                    rappels3.label1.text = "Info trouvé"
                End If
            Next

    .Visible est en fait égale à True si la forme est minimisée. (il faudrait utiliser plutôt

    If Rappel3.WindowState = FormWindowState.Minimized Then
          Rappel3.WindowState = FormWindowState.Normal
    End If
    )

    Si la forme n'est plus chargée, rien ne garanti que Rappels3.Visible aura changé de status entre 2 passages sur indexX,

    Vous pouvez avez donc 18x l'appel à Rappels2.Show sans que Visible soit passé à True à la fin de Rappels3.Load

    Je pense qu'il vous faut regarder le code fournit avec des tests sur l'existence des formes avec Invoke et repartir de là.

    Pour info lors du chargement d'une forme, les événements suivant arrivent dans cet ordre:

    Rappel1 Resize normale.
    Rappel1 New()
    Rappel1 Load
    Changement pour Rappel1.Visible = True
    Rappel1 Activé
    Rappel1.Shown

    et lorsque vous minimisez la forme, .Visible reste True. Lorsque vous fermez la forme, .Visible ne change pas à False avant que la forme disparaisse...


    Cyrille Precetti


    mardi 22 décembre 2015 01:39
  • Ok.. je n'ai pas le programme avec moi je vais vérifier ça! : ) a+

    La vie est belle!

    mardi 22 décembre 2015 16:32
  • Bonjour

    J'aimerais vous souhaiter un joyeux temps des fêtes!

    J'ai fait ce que vous m'avez demandé...

    J'ai changer les 

    If rappels3.visible = false then
    
    rappels3.show
    
    end if
    

    j'ai mis des bools et j'ai ajouté aussi le invoke!

    Malheureusement... ça n'a pas fonctionné! Je suis désolé!  : (

    Aussi, comme vous disiez que Activate 18x n'était pas normal... j'ai essayer des vérifier un activate sur une form qui va bien... et elle apparaît aussi plusieurs fois donc ce n'est pas uniquement relié à la form rappels3 ce nombre de fois c'est aussi relié à une form qui va bien

    En troisième lieu, j'ai vérifié les événements qui allait avec le show de rappels3 mais je n'ai pas la sub New

    En ordre d'apparition :

    1. resize (4x)

    2. load (1x)

    3. show (1x)

    4. visible change (1x)

    5. activate (18x)

    Je ramène les infos de base pour ramener notre esprit à l,endroit du bug :

    Si le      for x = 0 to 1000 trouve les 5 rappels en même temps, il n'y a pas de bug... s'il y en a 2 de trouvé et que le       for x = 0  to 1000    en trouve 1 autre c'est cette autre rappels trouvé en deuxième batch qui ne se remets pas à windowsstate normal quand on click dessus dans la barre des tâches

    Aussi, pourquoi le bug se passe uniquement aux forms rappels 1 à 5 et non à toutes les autres form du programme?

    J'ajoute une nouvelle information... :

    Quand j'ai créée les forms rappels 1 à 5, j'ai fait des copies de rappels1 pour faire rappel2 et j'ai modifé le code à la main... est-ce que ces copies ont pu mélanger quelque chose dans le cerveau de visual studio lorsqu'il les ouvre?

    Merci!

    Pierre

    : )


    La vie est belle!

    mercredi 23 décembre 2015 20:06
  • Merci et Bonnes Fêtes à vous aussi.

    Activate est un événement qui se déclenche lorsque la forme récupère le Focus.

    Cela peut être bloqué à une seule fois avec ce code suivant:

    Public Class Form1
    	Private FormeActiveeUneFois As Boolean = False
    
    	Private Sub Form1_Activated(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Activated
    		If FormeActiveeUneFois = False Then
    			'Passer FormeActiveeUneFois à True
    			FormeActiveeUneFois = True
    			'Là le reste du code de Activated
    		End If
    	End Sub
    End Class
    

    Il est probable que vos formes ont des différences. Est-ce que ces formes sont compliquées à part le message? Si elles sont simples recommencez les par exemples.


    Cyrille Precetti

    lundi 28 décembre 2015 17:27
  • ok alors je vais les refaire et je vous reviens avec ça....

    Merci!!!   : )


    La vie est belle!

    mercredi 30 décembre 2015 14:16
  • Bon...

    Dans activate je n'ai pas de code alors.. mais je l'ai fait quand même pour qu'on élimine toutes les hypothèses... donc.

    J'ai mis un bool dans activate... malheureusement ça n'a pas fonctionné ; )

    J'ai aussi refais toutes mes forms Rappels de 1 à 5 pour qu'elles ne proviennent pas d'une copie de Rappels1 mais malheureusement ça n'a pas fonctionné non plus

    Maintenant que nous avons éliminé quelques hypothèses.. j'aimerais amené un point...

    Si le        for x =  0 to 1000          trouve 5 rappels en lignes... il n'y a pas de bug... elles vont tous à windwostate normal sans problème...

    Mais si le           for x = 0 to 1000        en trouve 2 au début puis 2 autres dans une deuxième séquence 2 minutes plus tard... ce sont les 2 dernières qui ont un bug.. (comme nous savons déjà mais...)

    cela semble prouvé que je n'ai pas d'erreur de codage puisque s'il en trouve 5 en même temps... le code ne fait pas défaut..

    de plus.. j'ai ouvert d'autres forms que les forms Rappels et les autres ne bug pas.. ce sont uniquement celles appelées par le timer et en deuxième séquence qui bug... mon code ne peut pas buggé après qu'il fonctionne bien.. alors je suis allé voir comment mon code agissait en deuxième séquence et c'est identique... il entre dans le       for x = 0 to 1000          et fait exactement les mêmes choses....

    voilà pour le moment? : )


    La vie est belle!

    mercredi 30 décembre 2015 16:07
  • Bonjour

    J'espère que vous avez passé de belles vacances... quand vous serez prête à continuer.. vous me ferez signe merci!

    Le message précédent est le dernier constat que j'ai fait

    Merci  : )


    La vie est belle!

    mercredi 6 janvier 2016 02:12
  • Bonjour Peter,

    J'ai lu en diagonale !! Il faut déjà simplifier le code cela sera plus facile à lire et plus logique.

    Un exemple:

     Dim Rappels As Boolean ' c'est a false par défaut au moment de la déclaration de la variable donc pas desoin de = false
    
            If Not Rappels Then ' et pas if Rappels = false 
                ' c'est à false
            End If
    
            Rappels = True
    
            If Rappels Then ' et pas if Rappels = true
                ' c'est à true
            End If

    De plus il y a des redondances. Virer tous les Me. car tu es dans la form pourquoi l'appeler ?

    Sinon, pour ton problème je sélectionnerais en mode design une des Form qui fonctionne et passer en vue les propriétés (dans la fenêtre de droite) ce qui est en gras à été modifié... et comparer avec tes Form qui ne fonctionne pas

    Bien à vous. 


    ZGuideTV.NET - administrator/developer


    mercredi 6 janvier 2016 10:55
  • Salut

    Merci pour les indices!!

    J'ai comparé les propriétés et elles sont identiques...

    Ce qui est étrange.. c'est qu'elles fonctionnent... donc tout est identique...

    C'est qu'elle ne fonctionne pas lorsqu'il y a déjà Rappels1, Rappels2 d'ouvertes par exemple... 

    Pourquoi le code fonctionne mais... que s'il y a 3 Rappels d'ouvert, c'est rappels 4 et 5 qui ne fonctionnent pas ou s'il y a 2 rappels d'ouvert c'est rappels 3-4 ou 5 qui ne fonctionnent pas

    Et le fait que toutes les autres fenêtres fonctionnent montrent qu'il y a une interrelation entre ces 5 forms (selon moi)

    à moins que d'où elles viennent.. c'est à dire le timer qui passe le       for x = 0 to 1000      à toutes les 2 minutes (la source qui fait ouvrir les rappels de 1 à 5) aille une incidence sur les forms rappels ouvertes après qu'il y en aille de déjà d'ouvertes...?

    Toujours selon mon analyse!  : )

    Merci de m'aider vous aussi 

    Pierre


    La vie est belle!

    mercredi 6 janvier 2016 20:04
  • Cela fait trop d'inconnues pour comprendre ce qui se passe vraiment.

    Il semble que les problèmes de Thread n'ont pas été adressé.

    Pour pouvoir continuer il faut simplifier et poster tout le code en question.

    Bon courage


    Cyrille Precetti
    Bonne Année! Happy New Year!

    • Marqué comme réponse Peter_ZZZZZ vendredi 8 janvier 2016 22:57
    jeudi 7 janvier 2016 08:51
  • Salut

    Au lieu de vous envoyer un code épuré et de vous faire travailler à ma place.. j'ai décidé d'essayer mon code en l'épurant GRANDEMENT

    Alors j'ai enlevé tout le code dans chacun des Load des 5 form Rappels

    Le bug était encore là

    J'ai enlevé tout le code dans le timer qui appel ces forms là et j'ai laissé uniquement rappels.show, rappel2.show etc jusqu'à rappels5

    Le bug est parti

    Donc je vais remettre tout le code et enlever ligne par ligne pour savoir où est la source du bug...

    Ce qui est difficile à gérer, c'est que le code fonctionne... mais pas en deuxième batch...

    Je trouve quelles lignes qui font buggé et je vous reviens avec ça!! Merci  :)  :)  :)


    La vie est belle!

    • Marqué comme réponse Peter_ZZZZZ vendredi 8 janvier 2016 22:57
    vendredi 8 janvier 2016 17:53
  • Salut!!!

    Finaly!!!!  :)

    Je suis super content...

    Grace à votre question sur le fait qu'il y avait trop d'inconnu et que vous vouliez le code épuré.. j'ai pu trouvé le bug

    Voici le code qui faisait buggé :

    if rappels1Bool = true then
    rappels2.top = rappels1.top + 50
    end if

    Pourquoi il y avait un bug quand le      for x = 0  to 1000 passait une deuxième fois.. ?

    C'est que les form qui avaient déjà été affichées était minimisé... alors quand je demande que le top d'une prochaine form soit 50 de + que la form précédente et que celle-ci est minimisée... sont top est : soit 0 ou infini ou...  : )

    voilà!!!!!!

    Super

    Maintenant.. dite moi comment je peux voter pour vous

    et...

    voici un autre bug si vous avez envie d'y participer!!

    https://social.msdn.microsoft.com/Forums/fr-FR/35ee5aca-1109-454e-a8d3-9f9c8062b618/label-qui-ne-saffiche-pas-au-bon-endroit?forum=vbasicfr

    Merci encore pour votre support.. ce bug durait depuis déjà très longtemps et ça fera du bien de pouvoir avoir accès au message qui apparaisse en 2ième et 3ième batch!!!

    Au plaisir


    La vie est belle!

    vendredi 8 janvier 2016 22:57
  • Bonjour, Peter_ZZZZZ,

    Je vous remercie d'avoir partagé cette solution avec la communauté du forum.

    Cordialement,
    Teodora


    Votez! Appel à la contribution TechNet Community Support. LE CONTENU EST FOURNI "TEL QUEL" SANS GARANTIE D'AUCUNE SORTE, EXPLICITE OU IMPLICITE. S'il vous plaît n'oubliez pas de "Marquer comme réponse" les réponses qui ont résolu votre problème. C'est une voie commune pour reconnaître ceux qui vous ont aidé, et rend plus facile pour les autres visiteurs de trouver plus tard la résolution.

    vendredi 15 janvier 2016 16:34
    Modérateur
  • Bonjour Teodora

    : )

    Pas quoi!!!


    La vie est belle!

    vendredi 22 janvier 2016 16:34