Gambas France BETA


Pas de compte ? Incription

[resolu ] Envoyer un "paramètre" à un formulaire

Ce sujet est résolu.

12
AuteurMessages
manu#1 Posté le 25/3/2011 à 13:38:00
Avec Gambas ca roule !Bonjour,

j'ai un formulaire d’accès a une base de données qui me permet de créer, modifier ou supprimer un enregistrement avec 3 boutons en bas "créer" , "modifier", "supprimer". Bon ça, ça marche très bien :)

Maintenant je voudrais lancer ce même formulaire, a partir d'un autre formulaire mais en mode création par exemple.

Ma première idée serais d'utiliser une variable globale. Juste avant d'ouvrir mon formulaire je mettrais dans cette variable globale par exemple "créer" et a l'ouverture du formulaire, je lirais cette variable. En fonction du résultat je le mettrais en création ou modification.
ça marchera mais ça me parais pas très beau comme code car l'utilisation de variable globale est pas conseillée.

Est il possible a votre avis de lancer un formulaire un peu comme une fonction, avec des paramètres.


Ou alors vous, comment faites vous ?

Jeanne d'arc, elle a frit, elle a tout compris ! ;)

Config :
Manjaro linux (excellent !)
XFCE 4.1 (simple et efficace)
Gambas 3 dans les dépots (confort total)
linuxos#2 Posté le 25/3/2011 à 14:14:00
Un peu de sel, de poivre et la crevette sera... Manu,

C'est du langage Objet, donc tu peux transmettre directement des paramètres a ton Form
- soit en le créant (doublon de ton Form de base)
- soit en le lanceant:
- au travers de: PUBLIC SUB Form_Run(tonParamètre as String)


Exemple d'un de mes Formulaires:
J'ai créer un formulaire générique 'FormGene' pour afficher le contenu d'un fichier, donc le but est de transmettre le contenu ou le chemin du fichier
au formulaire a son ouverture. Cela se fait de la manière suivante:


Dans ton Formulaire 'APPELANT':

1
PUBLIC SUB BoutonOuvrir_Click() DIM sFormGenerique AS FormGene sFormGenerique = NEW FormGene sFormGenerique.Run(TonParametre)END


Dans ton Formulaire Generique:

1
' Gambas class filePUBLIC $TomParametre AS StringSTATIC PUBLIC FUNCTION Run(TonParametre as String) AS Boolean DIM hForm AS Form $TomParametre = TonParametre hForm = NEW FormScriptEditeur hForm.Show()END


Lorsqu'on s'occupe d'informatique, il faut faire comme les canards... Paraître calme en surface et pédaler comme un forcené par en dessous.
manu#3 Posté le 25/3/2011 à 17:12:00
Avec Gambas ca roule !Rhaaa, j'ai du mal avec la POO ! :)

Je vais transcrire ça dans mon application, ça m'aidera a mieux comprendre ....

Merci en tous cas, c'est une solution de ce type que je cherchais :)
Jeanne d'arc, elle a frit, elle a tout compris ! ;)

Config :
Manjaro linux (excellent !)
XFCE 4.1 (simple et efficace)
Gambas 3 dans les dépots (confort total)
spheris#4 Posté le 25/3/2011 à 21:16:00
manu,
2 solutions s'offrent à moi d'habitude:

A) je crée un module et dans ce module je crée une variable publique lisible par tous les form comme ceci :

1
PUBLIC mavarible AS INTEGER


il me suffit de lire ou ecrire dedans et modifier mon meme form en edition, lecture ou suppression comme ceci :
1
IF module1.mavariable = 1 THEN PRINT"ajout"IF module1.mavariable = 2 THEN PRINT"modif"IF module1.mavariable = 3 THEN PRINT"suppression"


---------------------------------------------------------------------------------------

B) j'utilise une fonction propre dans le form à modifier genre :
1
PUBLIC SUB demandedautreform(mademande AS INTEGER)SELECT CASE mademandecase 1PRINT"Ajout"CASE 2PRINT"modif"CASE 3PRINT"suppression"END selectEnd


puis je l'appelle de n'importe ou par :

1
formamodifier.demandedautreform(2)


et le tour est joué.
Dans les 2 cas le résultat est le même

;) ;)
manu#5 Posté le 25/3/2011 à 21:23:00
Avec Gambas ca roule !oui c'est ce que je pensais faire Spheris, c'est en gros ce que je dit dans ma premiere idée mais je cherchais quelque chose de plus élégant disont ;)

L'idée de linuxOs me plais car elle me fait aussi entrevoir l'idée, que dans certains cas je pourrais faire un form de base et qu'en fonction de comment je l'appel (ou à partir d'ou) je pourrais le modifier rien que par le code...
Jeanne d'arc, elle a frit, elle a tout compris ! ;)

Config :
Manjaro linux (excellent !)
XFCE 4.1 (simple et efficace)
Gambas 3 dans les dépots (confort total)
linuxos#6 Posté le 25/3/2011 à 21:48:00
Un peu de sel, de poivre et la crevette sera... Manu,

Si possible privilégie la POO dans ces cas la.
Je sais que le concept n'est pas facile a comprendre, mais une fois que tu as compris, c'est que du bonheur.

Un exemple simple:

Comment faire pour ouvrir plusieurs fois le même sans la POO, ben faut créer autant de Formulaire qu'il faut .... lol

Avec la POO, tu fais un seul Formulaire que tu dupliques a volonté, volonté, volonté .....

Trop bien ce truc.... mais galère a comprendre....

Et dans Gambas, a peu près tout est en Objet.

T'inquiètes pas on sera là pour te guider du peu de connaissance que nous avons aquis.

Spheris: Je trouve que t'as solution est pas jolie .... désolé .... mais je comprends, j'ai commencé comme ça moi aussi ...


Lorsqu'on s'occupe d'informatique, il faut faire comme les canards... Paraître calme en surface et pédaler comme un forcené par en dessous.
Prokopy#7 Posté le 25/3/2011 à 22:56:00
Kinder Pinguilinuxos,
Il y a quelques trucs que je ne comprends pas bien dans ta méthode. Puisque justement il s'agit d'un objet, pourquoi s'embêter à faire un formulaire "générique" alors que tu peux passer le paramètre directement à l'instanciation ?
En gros faire comme ceci :

Formulaire appelant :

1
2
3
4
PUBLIC SUB BoutonCreer_click()
DIM MonForm AS NEW FormBDD("creer")'Je fais un formulaire en mode "creation".
MonForm.Show() 'Affichage
END


FormBDD :
1
2
3
4
5
PUBLIC SUB _new(Mode AS STRING) 'Constructeur de l'objet, qui prend le parametre Mode
SELECT CASE Mode'Je traite tous les cas et je place mes controles en consequence ...

END SELECT
END


Ça m'a tout de même l'air plus simple non ? Garanti zéro variable globale, encapsulation respectée. :)
La théorie, c'est quand on sait tout et que rien ne fonctionne.
La pratique, c'est quand ça marche mais qu'on ne sait pas pourquoi.
Quand la théorie rejoint la pratique, rien ne fonctionne et on ne sait pas pourquoi.
linuxos#8 Posté le 25/3/2011 à 23:13:00
Un peu de sel, de poivre et la crevette sera... Prokopy,

Cela est tout a fait vrai, je l'utilise aussi.

Dans le cas ou tu veux pouvoir transmettre une autre valeur au paramètre sans devoir recréer ton Form
cela peut aussi être utile.

En fait tu a raison dans le sens ou on transmet généralement les paramètres a la création du Formulaire,
mais pas toujours, c'est fonction de ce que tu veux réaliser dans ton programme.

Au final, il n'existe pas une seule solution a un problème, mais plusieurs et certaines sont plus adapté que d'autre
dans certain cas.

Selon ce que je voulais réaliser, j'ai utilisé soit une solution soit l'autre.
Lorsqu'on s'occupe d'informatique, il faut faire comme les canards... Paraître calme en surface et pédaler comme un forcené par en dessous.
manu#9 Posté le 26/3/2011 à 08:15:00
Avec Gambas ca roule !ok proko, dans mon cas ta solution fonctionne aussi et c'est vrai que c'est plus simple :)

Bon maintenant que ca c'est réglé, est-ce que l'on peux passer plusieurs paramètres et comment ? Par exemple le mode du formulaire (creation, moddification...) et un chemin de fichier ou le nom d'une table. Je suppose que oui ?
Jeanne d'arc, elle a frit, elle a tout compris ! ;)

Config :
Manjaro linux (excellent !)
XFCE 4.1 (simple et efficace)
Gambas 3 dans les dépots (confort total)
GarulfoUnix#10 Posté le 26/3/2011 à 10:40:00
By the wayLinuxos, tout comme prokopy, l'utilisation du constructeur dans cette situation est ma foi plus élégante, et plus orienté objet.

Ensuite, l'utilisation du module est tout aussi bonne et correcte et en rien "moins POO".
Je rappel qu'un module n'est rien d'autre qu'une classe statique.

Et l'utilisation des classes statiques reste une pratique courante lorsqu'on a pas besoin d'instancier (dans ton cas linuxos, de "dupliquer").

Manu, tu peux employer sans soucis l'utilisation d'un module. Ca ne fait nullement sale.
manu#11 Posté le 26/3/2011 à 13:56:00
Avec Gambas ca roule !merci a tous pour toutes ces infos.

Pour passer plusieurs paramètres, il suffis de faire comme ceci selon la methode de prokopy :

Formulaire appelant :

1
2
3
4
5
6
7
8
9
PUBLIC SUB Button1_Click()
DIM MonForm AS NEW FormBDD("creer", "1") 'Je fais un formulaire en mode "création".
MonForm.Show() 'Affichage
END

PUBLIC SUB Button2_Click()
DIM MonForm AS NEW FormBDD("modification", "2")
MonForm.Show()
END


FormBDD

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
PUBLIC SUB _new(Mode AS STRING, suivant AS STRING) 'Constructeur de l'objet, qui prend le paramètre Mode
SELECT CASE Mode
CASE "creer"
Label1.Text = "Formulaire en mode création"
CASE "modification"
Label1.Text = "Formulaire en mode modification"
END SELECT

SELECT CASE suivant
CASE "1"
Label2.Text = "Formulaire en mode 1"
CASE "2"
Label2.Text = "Formulaire en mode 2"
END SELECT
END
Jeanne d'arc, elle a frit, elle a tout compris ! ;)

Config :
Manjaro linux (excellent !)
XFCE 4.1 (simple et efficace)
Gambas 3 dans les dépots (confort total)
manu#12 Posté le 5/11/2011 à 22:59:54
Avec Gambas ca roule !Bon un petit deterrage.... :)

Voici ce que je fait finalement :

Dans le formulaire applelant :

1
2
3
4
5
6
7
PUBLIC SUB Button1_Click()
DIM MonParametre AS STRING = "toto"

FReception.Run(MonParametre)
FReception.show

END




Dans Le Form appelé (FReception)

1
2
3
4
5
PUBLIC SUB Run(ParametreRecu AS STRING) AS STRING

TextBox1.Text = ParametreRecu

END


Et voila le travail :) ça marche aussi avec plusieurs paramètres....

Plus simple tu meurs :bball:

Jeanne d'arc, elle a frit, elle a tout compris ! ;)

Config :
Manjaro linux (excellent !)
XFCE 4.1 (simple et efficace)
Gambas 3 dans les dépots (confort total)
GarulfoUnix#13 Posté le 6/11/2011 à 10:28:22
By the wayQuelques bugs se sont présentés à moi sur ce topics :

- Pas de retour à la ligne dans les balises codes (en revanche en éditant ce message, celui de manu a 22:59 hier s'affiche correctement (seul le dernier))
- Toujours en mode "répondre", je ne vois que les messages de Manu! Pas les autres.

2 vilains bugs à chasser :) .
manu#14 Posté le 6/11/2011 à 14:13:33
Avec Gambas ca roule !Oui de Vilains bugs effectivement mais là, ca a l'air de marcher :)

France1159, qu'est que tu penses de ma dernière solution ? pas mal non ?
Jeanne d'arc, elle a frit, elle a tout compris ! ;)

Config :
Manjaro linux (excellent !)
XFCE 4.1 (simple et efficace)
Gambas 3 dans les dépots (confort total)
gambix#15 Posté le 6/11/2011 à 15:27:38
Faire simple !Bon alors la technique standard Gambasienne ... depuis la v... heu 0.3 ou 0.4

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
'Formulaire
STATIC PUBLIC Value AS STRING
STATIC PUBLIC Value2 AS INTEGER

STATIC PUBLIC SUB Run() AS BOOLEAN
RETURN Moi.ShowModal
END

PUBLIC SUB _New()
TextBox1.Text = Moi.Value
END
PUBLIC SUB Button_Click()
Moi.Value2 = TextBox1.Text
ME.Close
END



1
2
3
4
5
'Dans Le formulaire d'appel
Moi.Value = Test
IF NOT Moi.Run() THEN
PRINT Moi.Value2
END
Moins de texte dans une signature c'est agrandir son espace.
12