Load event et paint event

Résolu
cs_ShayW Messages postés 3253 Date d'inscription jeudi 26 novembre 2009 Statut Membre Dernière intervention 3 décembre 2019 - 21 déc. 2011 à 22:05
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 - 23 déc. 2011 à 07:10
Bonsoir/Bonjour à tous

J'ai deux évenements
form1_load et form1_paint
je voudrais que form1_load soit executé avant
form1_paint parcequ'un dépend de l'autre

Merci

11 réponses

Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
23 déc. 2011 à 07:10
vu...

c'est le
Me.ResumeLayout(False)
dans ton InitializeComponent de ta Form qui fait cela.
souhaitant dessiner le panel, il lui faut au moins la zone sise en dessous, du coup => Form1_Paint est appelé.

bien vu que tu as solutionné cela en chargeant ton image dans le _Paint.

une autre solution est de le faire en amont :

Partial Class Form1
    Private Image1 As Image = Nothing

    Public Sub New()
        Image1 = Image.FromFile("C:\Documents and Settings\rthomas.BUDAPLAN\Mes documents\Mes images\wallpaper-757058.jpg")
        InitializeComponent()
    End Sub

    Private Sub Form1_Paint(ByVal sender As System.Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles MyBase.Paint
        e.Graphics.DrawImage(Image1, 0, 0)
    End Sub
End Class



Renfield - Admin CodeS-SourceS - MVP Visual Basic & Spécialiste des RegExp
3
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
21 déc. 2011 à 22:11
Bonsoir,

l'évènement Load (de chargement) est DE TOUTES MANIERES le tout premier à intervenir (par définition) !
Que veux-tu dire ?


____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
21 déc. 2011 à 22:19
En mettant un messagebox de "load" dans l'évènement Load, de "Paint" dans l'évènement Paint, etc ... (pour tous les évènements de ton Form) ===>> tu constateras dans quel ordre ils interviennent


____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
0
cs_ShayW Messages postés 3253 Date d'inscription jeudi 26 novembre 2009 Statut Membre Dernière intervention 3 décembre 2019 57
21 déc. 2011 à 22:26
Bonsoir Ucfoutu

Je pensais aussi
mais quand je lance l'application
l'évenement paint intervient avant le load
j'ai mis un point d'arret dans chacun
et c'est le paint qui est arrivé le premier
quand je lance l'application
J'ai réussi à contourner le problème
enfin peut etre il y a une réponse
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
NHenry Messages postés 15112 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 13 avril 2024 159
21 déc. 2011 à 23:25
Bonjour,

Tu peux utiliser un booléen, que tu mets à True une fois le Load passé.

---------------------------------------------------------------------
[list=ordered][*]Pour poser correctement une question et optimiser vos chances d'obtenir des réponses, pensez à lire le règlement CS, ce lien ou encore celui-ci[*]Quand vous postez un code, merci d'utiliser la coloration syntaxique (3ième icône en partant de la droite : )
[*]Si votre problème est résolu (et uniquement si c'est le cas), pensez à mettre "Réponse acceptée" sur le ou les messages qui vous ont aidés./list
---
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
22 déc. 2011 à 07:08
Pas bon le point d'arret, ou une MsgBox, d'ailleurs

c'est intrusif

le Paint se declenchera alors pour redessiner la Form...


Renfield - Admin CodeS-SourceS - MVP Visual Basic & Spécialiste des RegExp
0
cs_ShayW Messages postés 3253 Date d'inscription jeudi 26 novembre 2009 Statut Membre Dernière intervention 3 décembre 2019 57
22 déc. 2011 à 10:08
Bonjour à tous

les points d'arret c'était pour analyser le problème
j'ai retirer les points d'arret
quand je lance l'application une exception est relevée
Private Sub For1_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles Me.Paint
'ici l'erreur  
     e.Graphics.DrawImage(image1
    End Sub 


l'erreur est due: image1 n'est pas chargé
je l'ai bien chargé dans l'évenement load de la form mais bizarre l'évenement paint est déclenché en premier
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
22 déc. 2011 à 10:18
J'ai :

Partial Class Form1
    Private Image1 As Image = Nothing

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Image1 = Image.FromFile("C:\Documents and Settings\rthomas.BUDAPLAN\Mes documents\Mes images\wallpaper-757058.jpg")
    End Sub

    Private Sub Form1_Paint(ByVal sender As System.Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles MyBase.Paint
        e.Graphics.DrawImage(Image1, 0, 0)
    End Sub
End Class


et ca fonctionne sans heurs...

Renfield - Admin CodeS-SourceS - MVP Visual Basic & Spécialiste des RegExp
0
cs_ShayW Messages postés 3253 Date d'inscription jeudi 26 novembre 2009 Statut Membre Dernière intervention 3 décembre 2019 57
22 déc. 2011 à 12:43
Oui je sais
j'ai testé aussi
le load est declenché le premier
donc vraiment bizarre avec ma form
et encore plus bizarre
si je mets la propriété du windows state
à normal tout fonctionne normalement
si je change à maximized le paint est declenché
en premier
donc
j'ai contourné le problème en chargeant l'image
dans le paint
 Private Sub Form1_Paint(ByVal sender As System.Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles MyBase.Paint
    If image1 Is Nothing Then
                imageleschiffres = Image.FromFile(Application.StartupPath & "\image1.png")
     End If
    e.Graphics.DrawImage(Image1, 0, 0)
    End Sub
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
22 déc. 2011 à 13:05
même en ayant ma feuille en Maximized, mon Load passe en premier, heureusement ^^

tu parles bien de changer les propriété en mode Design ?

parce que si tu t'amuses a changer cela dans ton _Load, là, c'est toi qui le déclenche, ton _Paint ...

Renfield - Admin CodeS-SourceS - MVP Visual Basic & Spécialiste des RegExp
0
cs_ShayW Messages postés 3253 Date d'inscription jeudi 26 novembre 2009 Statut Membre Dernière intervention 3 décembre 2019 57
22 déc. 2011 à 17:52
J'ai trouvé

en mode design windows state maximize
sur la form ajoute un panel
et backcolor transparent
le code comme tu as écrit
Partial Class Form1
    Private Image1 As Image = Nothing

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Image1 = Image.FromFile("C:\Documents and Settings\rthomas.BUDAPLAN\Mes documents\Mes images\wallpaper-757058.jpg")
    End Sub

    Private Sub Form1_Paint(ByVal sender As System.Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles MyBase.Paint
        e.Graphics.DrawImage(Image1, 0, 0)
    End Sub
End Class


le backcolor transparent du panel cause
le event paint de la form a etre déclenché
avant le load
0
Rejoignez-nous