OVH Cloud OVH Cloud

Modifier un controle du MainForm depuis un module

12 réponses
Avatar
ArnaudG
Bonjour,

Mon problème paraît simple, mais je ne m'en sors pas.
J'ai une petite application en VB .net composée de :

- 1 form principale (MainForm)
- 1 module où j'ai mis mes fonctions (déclenchées par des boutons de MainForm)

Dans MainForm, j'ai un label "labelDebug" dans lequel je voudrais écrire des
infos depuis les fonctions de mon module.

Voici le code de déclaration de mon Mainform (généré par VB) :

Public Class MainForm
Inherits System.Windows.Forms.Form
(...)
Public labelDebug As System.Windows.Forms.Label

- Dans mon module, j'ai essayé :

MainForm.labelDebug.text="mon texte"

Mais le compilateur ne connaît pas "MainForm".

- J'ai essayé de créer une Sub dans MainForm :

Public Sub ChangeTexte (ByVal texte As String)
Me.labelDebug.Text=texte
End Sub

Mais dans le module, la fonction est inaccessible.


Je ne sais plus trop comment faire, pourtant ça paraît simple !
Merci pour votre aide !

10 réponses

1 2
Avatar
Mathieu Francesch
Bonjour Arnaud,

Si tu créé une procédure dans ton module

Public Sub ChangeTexte (ByVal texte As String)
MainForm.labelDebug.Text=texte
End Sub

Comment cela réagit-il ?

--
Cordialement,

Mathieu Francesch



"ArnaudG" wrote:

Bonjour,

Mon problème paraît simple, mais je ne m'en sors pas.
J'ai une petite application en VB .net composée de :

- 1 form principale (MainForm)
- 1 module où j'ai mis mes fonctions (déclenchées par des boutons de MainForm)

Dans MainForm, j'ai un label "labelDebug" dans lequel je voudrais écrire des
infos depuis les fonctions de mon module.

Voici le code de déclaration de mon Mainform (généré par VB) :

Public Class MainForm
Inherits System.Windows.Forms.Form
(...)
Public labelDebug As System.Windows.Forms.Label

- Dans mon module, j'ai essayé :

MainForm.labelDebug.text="mon texte"

Mais le compilateur ne connaît pas "MainForm".

- J'ai essayé de créer une Sub dans MainForm :

Public Sub ChangeTexte (ByVal texte As String)
Me.labelDebug.Text=texte
End Sub

Mais dans le module, la fonction est inaccessible.


Je ne sais plus trop comment faire, pourtant ça paraît simple !
Merci pour votre aide !


Avatar
ArnaudG
Bonjour Mathieu,

Si je crée cette procédure dans mon module, il ne reconnaît pas MainForm :

error BC30451: Name 'MainForm' is not declared

...

"Mathieu Francesch" wrote:

Bonjour Arnaud,

Si tu créé une procédure dans ton module

Public Sub ChangeTexte (ByVal texte As String)
MainForm.labelDebug.Text=texte
End Sub


Avatar
Mathieu Francesch
Re,

En créant un nouvel objet dans ton module qui fait référence à Maiform :

Sub test()
Dim MaMainForm As New MainForm
MaMainForm.Label1.Text = "Test"
End Sub

Que ce passe t-il ?

--
Cordialement,

Mathieu Francesch



"ArnaudG" wrote:

Bonjour Mathieu,

Si je crée cette procédure dans mon module, il ne reconnaît pas MainForm :

error BC30451: Name 'MainForm' is not declared

...

"Mathieu Francesch" wrote:

> Bonjour Arnaud,
>
> Si tu créé une procédure dans ton module
>
> Public Sub ChangeTexte (ByVal texte As String)
> MainForm.labelDebug.Text=texte
> End Sub



Avatar
ArnaudG
Il ne connait pas le type MainForm :

error BC30002: Type 'MainForm' is not defined

Il y a vraiment quelque chose qui m'échappe...

"Mathieu Francesch" wrote:

Re,

En créant un nouvel objet dans ton module qui fait référence à Maiform :

Sub test()
Dim MaMainForm As New MainForm
MaMainForm.Label1.Text = "Test"
End Sub

Que ce passe t-il ?


Avatar
ArnaudG
... pour avancer un peu : j'ai l'impression que mon MainForm sait accéder à
mon module, puisque les fonctions appelées fonctionnent, mais l'inverse n'est
pas vrai :

module.vb ne sait pas que MainForm.vb existe

Est-ce possible ?
Comment "rétablir la communication" ?

"ArnaudG" wrote:

Il ne connait pas le type MainForm :

error BC30002: Type 'MainForm' is not defined

Il y a vraiment quelque chose qui m'échappe...

"Mathieu Francesch" wrote:

> Re,
>
> En créant un nouvel objet dans ton module qui fait référence à Maiform :
>
> Sub test()
> Dim MaMainForm As New MainForm
> MaMainForm.Label1.Text = "Test"
> End Sub
>
> Que ce passe t-il ?



Avatar
ArlodVig
Je crois que j'ai le même problème

si je fais avec form1 la fenêtre principale

dans form2

Dim fform1 As New Form1


Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button1.Click
fform1.Show()
fform1.Label1.Text = "Maurice"
End Sub

ça marche... mais évidemment cela ouvre une nouvelle fenêtre Form 1
Et ce n'est pas ce que je veux puisque je voudrais écrire dans la form1
principale

Bizarre que ce soit si compliqué dans vb.net alors que c'est si simple dans
les précédentes versions

Maurice
Avatar
ArnaudG
Oui, c'est très tordu...

Ton cas ressemble pas mal à ce qui est traité dans ce post :

http://forum.hardware.fr/hardwarefr/Programmation/VB-Net-Comment-acceder-composants-autres-form-sujet-62552-1.htm

La procédure main() est dans mon MainForm, et je n'arrive pas à la déplacer
dans le module, ça ne marche pas. Je pense que si j'arrivais à instancier
MainForm depuis le module je pourrais faire ce que je veux, mais ... mon
module ne veut pas entendre parler de MainForm.

Limite énervant tout ça...

"ArlodVig" wrote:

Je crois que j'ai le même problème

si je fais avec form1 la fenêtre principale

dans form2

Dim fform1 As New Form1


Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button1.Click
fform1.Show()
fform1.Label1.Text = "Maurice"
End Sub

ça marche... mais évidemment cela ouvre une nouvelle fenêtre Form 1
Et ce n'est pas ce que je veux puisque je voudrais écrire dans la form1
principale

Bizarre que ce soit si compliqué dans vb.net alors que c'est si simple dans
les précédentes versions

Maurice



Avatar
ArlodVig
J'ai essayé la méthode préconisé qui semblait marché, mais chez moi cela ne
marche pas

J'ai l'erreur

Une exception non gérée du type 'System.InvalidCastException' s'est produite
dans WindowsApplication1.exe

Informations supplémentaires : Le cast spécifié n'est pas valide.

lorsque le ligne
f = Form.ActiveForm

s'éxécute


Je crise !!!


Maurice
Avatar
ArnaudG
Je compatis !
Je n'ai pas d'idée pour ton problème, je débute en VB...

Bon, concernant le mien, j'ai fait un gros copier/coller de mon module dans
le code de mon MainForm et voilà, ça marche, c'est hyper dégueu, mais en
attendant mieux, ça me permet d'avancer.

Je suis preneur si quelqu'un a une solution plus propre...

"ArlodVig" wrote:


J'ai essayé la méthode préconisé qui semblait marché, mais chez moi cela ne
marche pas

J'ai l'erreur

Une exception non gérée du type 'System.InvalidCastException' s'est produite
dans WindowsApplication1.exe

Informations supplémentaires : Le cast spécifié n'est pas valide.

lorsque le ligne
f = Form.ActiveForm

s'éxécute


Je crise !!!


Maurice


Avatar
ArlodVig
Arnaud,


J'ai trouvé une solution qui peux peut être t'aider

j'ai form1 : form principale

form2 fenetre secondaire

module1 un module vb


dans module 1 je déclare :
Public main1 As form1

Dans sub form1_load

je mets

main1 = Me


et après dans les module ou dans les autres form j'ai accès à tout les
contrôles et objet public de la forme principale par exemple

Main1.label1.text="toto"

et ça marche !!!


J'espère que cela peut t'aider


Maurice
1 2