Image (Picturebox) de Form1, depuis Form2

GregYoung 25 Messages postés samedi 21 avril 2018Date d'inscription 3 juin 2018 Dernière intervention - 5 mai 2018 à 17:20 - Dernière réponse : Whismeril 11955 Messages postés mardi 11 mars 2003Date d'inscriptionContributeurStatut 20 août 2018 Dernière intervention
- 12 mai 2018 à 01:40
Bonjour à tous !
Petit problème pour laquelle je ne trouve aucune solution :
J'ai 2 forms : Form1 et Form2
J'ai une SUB public (Rafraichir) sur Form1 qui doit afficher une image dans un picturebox.

Public Sub Rafraichir()
        If iTheme < 2 Then iTheme += 1 Else iTheme = 0
        SetTheme()
        Me.Corner1.Image = cadre1
        Me.Corner2.Image = cadre2
        Me.Corner3.Image = cadre3
        Me.Corner4.Image = cadre4
        Me.Corner5.Image = cadre5
        Me.Corner6.Image = cadre6
    End Sub


Quand j'appelle cette sub depuis un évènement Click de Form2, rien ne se produit.
Aucune erreur n'est affichée cependant.

Frm_Main.Rafraichir()


Auriez-vous une idée ?
Merci d'avance ;-)
Afficher la suite 

Votre réponse

10 réponses

Whismeril 11955 Messages postés mardi 11 mars 2003Date d'inscriptionContributeurStatut 20 août 2018 Dernière intervention - 6 mai 2018 à 01:56
0
Merci
Comment tu appelles cette sub depuis un événement click de form2?
GregYoung 25 Messages postés samedi 21 avril 2018Date d'inscription 3 juin 2018 Dernière intervention - 7 mai 2018 à 10:03
Disons que c'est là tout le problème.
Dans Form1, pour appeler la sub Rafraichir, comme chacun sait, aucun problème et elle s'exécute correctement.

Depuis Form2, je l'appelle en faisant :
Form1.Rafraichir()   ' Aucune erreur, mais sans effet

Si je fais :
Dim page1 as Form1
page1.Rafraichir()   ' ça ne s'exécute pas non plus.


En fait, au départ et d'un point de vue hiérarchique, c'est Form1 qui arrive en premier. Elle contient un tabcontrol (et ses tabpages) dans lequel vient s'afficher sur demande, la Form2.
Peut-être une histoire de contrôles parent/enfant pour laquelle il faut donner la bonne instruction, mais que je ne connais pas encore.. Oups
Commenter la réponse de Whismeril
Whismeril 11955 Messages postés mardi 11 mars 2003Date d'inscriptionContributeurStatut 20 août 2018 Dernière intervention - 7 mai 2018 à 12:08
0
Merci
Ok, c’est ce que je pensais.
Quand tu écrit
Dim page1 as Form1
ça crée une nouvelle instance de Form1. Du coup le code est bien exécuté mais pour cette instance.

Ce qu’il faut faire, c’est passer la référence de la bonne instance de Form1 à Form2 (en paramètre dans le constructeur par exemple).

J’ai ecrit un petit article sur le sujet
https://codes-sources.commentcamarche.net/faq/11107-interactions-entre-form-en-net-c-et-vb-net
GregYoung 25 Messages postés samedi 21 avril 2018Date d'inscription 3 juin 2018 Dernière intervention - 7 mai 2018 à 15:26
Ok. Merci. Je vais tester
GregYoung 25 Messages postés samedi 21 avril 2018Date d'inscription 3 juin 2018 Dernière intervention - 7 mai 2018 à 15:39
Pourquoi, depuis la form2, faut-il mettre 'Form2' dans la variable page1 ?
Whismeril 11955 Messages postés mardi 11 mars 2003Date d'inscriptionContributeurStatut 20 août 2018 Dernière intervention - 7 mai 2018 à 18:04
Au temps pour moi
Dim page1 as Form1'au niveau de la classe

Public Sub New(LaForm1 as Form1)'ajout du paramètre dans le constructeur
   page1 = LaForm1
End Sub

'ensuite tu peux utiliser la variable page1
GregYoung 25 Messages postés samedi 21 avril 2018Date d'inscription 3 juin 2018 Dernière intervention - 11 mai 2018 à 16:08
Ok, ça fonctionne... dans l'idée.. Mais, dans mon cas, ça m'a généré un nombre d'erreurs incalculables dans mon projet.
Il a rejeté toutes les instructions du genre :
Dim newpage as new frm_nouvellepage

Du coup, je suis passé par un Timer qui lance la sub dès qu'une variable du module est modifiée..
Whismeril 11955 Messages postés mardi 11 mars 2003Date d'inscriptionContributeurStatut 20 août 2018 Dernière intervention - 12 mai 2018 à 01:40
Le timer n’est pas une bonne solution.

Tu as 2 options
Soit à chaque appel de frm_nouvellePage, tu lui passes la référence à Form1.
Soit tu gardes un constructeur sans paramètre.

Dim page1 as Form2'au niveau de la classe

Public Sub New(Form2 LaForm1)'ajout du paramètre dans le constructeur
   page1 = LaForm1
End Sub

Public Sub New()’constructeur sans paramètre 
   
End Sub
Commenter la réponse de Whismeril

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.