Aide - Recherche - Membres - Calendrier
Version complète : Echange de données inter-forms
Les Forums de PalmAttitude.org > GENERAL PalmOS > Développement sous PalmOS > Développement HB++
JEANNE
Salut à tous,

après en discuté avec deux collègues du forum (El Barto et D2P), je m'en remets à vous pour la question suivante :

Est ce que quelqu'un connait la façon de pouvoir réaliser des échanges de données entre des formulaires différents d'un même projet et notamment ce que j'appelle moi (peut-être maladroitement) des calculs "Inter-Form" ?

exemple :

Field5 Form3 = (Field2 Form1 + Field4 Form2)
El Barto
Dans toute application qui se respecte anim_wink.gif tu dois avoir une form "principale" et des "sous-form" qui sont à priori ouvertes en mode modal.
Comme expliqué dans l'aide de HB++, tu dois mettre les valeurs des fields de la sous-form dans des variables.
Tu devrais avoir dans la form principale un truc du genre:
CODE
Private Sub Button1_Click()
  Dim f As frmSub1

  f.Field1="Init Value"
  f.Show hbFormModal+hbFormPopup
  If f.bOk Then
    MsgBox "Entered text: " & f.MyText
  End If
End If

Dans ta sub-form tu aurais:
CODE
Public MyText as String

Private Sub ButtonOk_Click()
   MyText=field1.Text
End If


Voilà
palmgaulois
bien la réponse la plus évidente est d'utiliser des variables (memoire) globale (public)

tu ajoute à ton projet un module que tu appel par exemple:

global

dedans tu places les variables à déclarer:

Public champ53 as string
public champ21 as String, champ42 as string

dans chacune de tes form:

form 2
champ21 = field21.text

form 4
champ42 = field42.text

puis tu peux récuperer toutes tes valeurs dans la form qui te convient

form5:
form load()
champ53 = cLng (champ21)+cLng(champ42)
field52.text = champ53
end sub
palmgaulois
Jeanne:
CITATION
Salut et merci pour ta réponse
j'ai fait la manoeuvre et pourtant en compilant il me met :

frmMain.hbf (1) : error #2019 : parse error before 'form' : statement expected

(Dans le MainForm)

form load()
Champs53=cLng(Champs21)+cLng(Champs42)
field1.Text=Champs53
end sub

Private Sub Button1_Click()
dim f as new Form1
f.Show hbFormGoto+hbFormModeless
End Sub

Form1.hbf (1) : error #2019 : parse error before 'Champs21' : statement expected

(Dans Form1)
Champs21=field1.text

Private Sub Button1_Click()
dim f as new Form2
f.Show hbFormGoto+hbFormModeless
End Sub


Form2.hbf (1) : error #2019 : parse error before 'Champs42' : statement expected

(Dans Form2)

Champs42=field1.text

Private Sub Button1_Click()
dim f as new frmMain
f.Show hbFormGoto+hbFormModeless
End Sub

(Dans le module)
Public Champs53 as String
Public Champs21 as String
Public Champs42 as String



Je répond ici (et pas en MP) pour que tous en profite.

La syntaxe que j'ai utilisé n'est pas celle que le programme comprend, c'est juste l'idée.
le "form load" s'écrit "Private Sub Form_Load()"
d'ailleurs il n'est pas non plus utile de l'écrire soit meme , un click droit sur la form (là où il n'y a pas d'objet) suffit ou encore la liste déroullante au dessus du code, a gauche tu choisi l'objet à droit sa methode.

HB++ comme VB sur PC, c'est de la programmation événementielle, donc tu ne peux pas écrire dans un source (form 2)

Champs42=field1.text tout seul,

cela doit etre dans une procédure par exemple dans ta form je vois que tu as un bouton Button1 pour la fermer, et bien utilise la méthode click() sur le bouton qui ferme avant de quitter l'écran,
ou encore dans ton champ de saisie field1, utilise la méthode change()
exemple:
form 2
soit un bouton Button1 et le champs de saisie field1:

private sub Button1_Click()
Champs42=field1.text
dim f as new frmMain
f.Show hbFormGoto+hbFormModeless
end sub

ou encore

private sub field1_change()
Champs42=field1.text
end sub

enfin concernant l'ordre, tu indiques que le mainform est celle ou le calcul se fait dans le load, mais c'est un non sens car les valeurs ne sont pas encore connues quand le programme se lance.

tu dois soit déplacer le code du calcul sur un bouton_click, soit permetuter l'ordre d'apparition des forms: d'abord la saisie des 2 valeurs puis le calcul.
JEANNE
Merci pour ton aide, ça marche impec. Je mets tout cela en application dans mon programme

A bientôt
Ceci est une version "bas débit" de notre forum. Pour voir la version complète avec plus d'information, la mise en page et les images, veuillez cliquer ici.
Invision Power Board © 2001-2008 Invision Power Services, Inc.