Image (Picturebox) de Form1, depuis Form2

GregYoung Messages postés 29 Date d'inscription samedi 21 avril 2018 Statut Membre Dernière intervention 23 décembre 2018 - 5 mai 2018 à 17:20
Whismeril Messages postés 19028 Date d'inscription mardi 11 mars 2003 Statut Non membre Dernière intervention 24 avril 2024 - 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 ;-)

2 réponses

Whismeril Messages postés 19028 Date d'inscription mardi 11 mars 2003 Statut Non membre Dernière intervention 24 avril 2024 656
6 mai 2018 à 01:56
Comment tu appelles cette sub depuis un événement click de form2?
0
GregYoung Messages postés 29 Date d'inscription samedi 21 avril 2018 Statut Membre Dernière intervention 23 décembre 2018
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
0
Whismeril Messages postés 19028 Date d'inscription mardi 11 mars 2003 Statut Non membre Dernière intervention 24 avril 2024 656
7 mai 2018 à 12:08
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
0
GregYoung Messages postés 29 Date d'inscription samedi 21 avril 2018 Statut Membre Dernière intervention 23 décembre 2018
7 mai 2018 à 14:46
Merci Whismeril pour ton lien. Je pense que ça va bp m'aider, même si je débarque avec le 'Binding'.
Après quelques lectures et relectures, je n'arrive pas à comprendre d'où vient "DetailRDVBindingSource" ? Dans mon projet, ça me dit que ce n'est pas déclaré..
0
Whismeril Messages postés 19028 Date d'inscription mardi 11 mars 2003 Statut Non membre Dernière intervention 24 avril 2024 656
7 mai 2018 à 15:20
Le binding n'est pas adapté à ton utilisation.
Ca marche avec des propriétés et tu as besoin de lancer une méthode.

Passer la référence en paramètre est, à mon sens, la meilleure option.
C'est vrai que je n'ai pas trop développé ce point, renvoyant le lecteur vers le source de Bidou, mais, comme il est en C#, il faut le traduire (il ya tout ce qu'il faut en ligne https://www.google.com/search?q=C%23+to+vb&sourceid=ie7&rls=com.microsoft%3Afr-FR%3AIE-Address&ie=&oe=&gws_rd=ssl ).

J'améliorerai cela un de ces 4.

En attendant (je n'ai pas VS sous la main alors c'est pas du 100% syntaxe parfaite)

Dans Form2

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

'ensuite tu peux utiliser la variable page1


Dans Form1, à l'endroit où tu lances Form2
dim laForm2 as New Form2(Me)
laForm2.Show
0
GregYoung Messages postés 29 Date d'inscription samedi 21 avril 2018 Statut Membre Dernière intervention 23 décembre 2018
7 mai 2018 à 15:26
Ok. Merci. Je vais tester
0
GregYoung Messages postés 29 Date d'inscription samedi 21 avril 2018 Statut Membre Dernière intervention 23 décembre 2018
7 mai 2018 à 15:39
Pourquoi, depuis la form2, faut-il mettre 'Form2' dans la variable page1 ?
0
Whismeril Messages postés 19028 Date d'inscription mardi 11 mars 2003 Statut Non membre Dernière intervention 24 avril 2024 656
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
0
Rejoignez-nous