Bonjour à tous,

Débutant en Flex, et planté sur un bug depuis plusieurs jours, je me permets de faire appel à la communauté.

J'ai commencé une application, un espace admin de site web, avec différents onglets grâce à un "TabNavigator". Au fil des jours, je rajoute des onglets sur lesquels se trouvent des "DataGrid" et des "Button" permettant d’accéder à des popup (composants MXML) qui contiennes des formulaires d'ajouts, ou de modifications.

Jusqu'à là tout fonctionné correctement mais depuis aujourd'hui, j'ai une erreur qui reviens en permanence dès que je saisi du texte dans n'importe quel champs :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
TypeError: Error #1009: Il est impossible d'accéder à la propriété ou à la méthode d'une référence d'objet nul.
	at mx.containers::TabNavigator/keyDownHandler()[E:\dev\4.y\frameworks\projects\mx\src\mx\containers\TabNavigator.as:895]
J'ai beau enlever l'onglet ajouté dernièrement ainsi que les formulaires reliés, mais rien y fait... et ce message d'erreur apparait lorsque je saisie du texte, dès le première caractère tapée, sur tous les champs, peu importe ou ils se situent dans l'application.

Si quelqu'un par hasard à déjà eu se genre de soucis, ou que quelqu'un peut m'éclairer...

Voici le code du fichier admin.mxml

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"
			   xmlns:s="library://ns.adobe.com/flex/spark"
			   xmlns:mx="library://ns.adobe.com/flex/mx"
			   xmlns:liste_client="services.liste_client.*" initialize="initializeHandler(event)"
			   width="1059" height="598" minWidth="955" minHeight="600" applicationComplete="init()">
	<fx:Script>
		<![CDATA[
 
			import com.adobe.serializers.utility.TypeUtility;
			import mx.managers.PopUpManager;
			import mx.controls.Alert;
			import mx.events.FlexEvent;
			import mx.rpc.events.ResultEvent;
 
			private function init():void{
				getClients();
				getFamilles();
				getProduits();
				getFournisseurs();
				get_pays.send();
				get_departements.send();
				getAppelations();
				getActualites()
			}
 
 
			/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
			/////////////////////////////////////////////////////////  IDENTIFICATION  /////////////////////////////////////////////////////////////
			/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
 
			import mx.containers.Form;
			import User;
 
			private var _logInForm:LogInForm;
 
			private function initializeHandler(event:Event):void{
				//récupère le sharedObject utilisé pour stocker la data
				var sharedObject:SharedObject = SharedObject.getLocal("userData");
 
				// Ecoute les évenements de cette instance d'User
				User.getInstance().addEventListener(User.AUTHENTICATE_SUCCESS,removeLogInForm);        
				User.getInstance().addEventListener(User.AUTHENTICATE_FAIL,displayLogInForm);    
 
				// si le SOL ne contient aucune data utilisateur, alors on affiche la fenetre de login.
				// Sinon on authentifie l'utilisateur avec les infos contenues dans le SOL
				if (sharedObject.data.user == null){
					displayLogInForm();
				} else {
					User.getInstance().authenticate(sharedObject.data.user.username, sharedObject.data.user.password);
				}
			}
 
			private function displayLogInForm(event:Event = null):void{
				if(_logInForm == null){
					_logInForm = new LogInForm();
					PopUpManager.addPopUp(_logInForm, this, true);
					PopUpManager.centerPopUp(_logInForm);
				}
			}
 
			private function removeLogInForm(event:Event = null):void{
				if(_logInForm != null){
					PopUpManager.removePopUp(_logInForm);
					_logInForm = null;
				}
			}
 
			/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
			/////////////////////////////////////////////////////////GESTION DES CLIENTS/////////////////////////////////////////////////////////////
			/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
 
			public function rafraichir_client():void{
				getClients();
			}
 
			//Ouverture de la Popup de Modification de client
			public var ModifClient:Modification_Client;
			private function popUpModification_Client():void  {
				ModifClient = new Modification_Client();		
				ModifClient.id_client = dataGrid.selectedItem.id_client; 
				PopUpManager.addPopUp(ModifClient, this, true);
				PopUpManager.centerPopUp(ModifClient);
				PopUpManager.bringToFront(ModifClient);
			}
 
			//Ouverture de la Popup de création de client
			public var CreationClient:Creation_Client;
			private function popUpCreation_Client():void  {
				CreationClient = new Creation_Client();		
				PopUpManager.addPopUp(CreationClient, this, true);
				PopUpManager.centerPopUp(CreationClient);
				PopUpManager.bringToFront(CreationClient);
			}
 
			//Génération de la liste des Pays
			[Bindable]
			public var ListpaysXml:XML;
			private function getPaysHandler(event:ResultEvent):void{ 
				ListpaysXml = event.result as XML;
			}
 
			//Recupere les clients avec la recherche si présente
			private function getClients():void{
				if(recherche.text != '') {
					var data:Object = new Object();
					data.recherche = recherche.text;
					getXmlClients.send(data);
				}else{
					getXmlClients.send();
				}
			}
 
			//Génération de la liste des clients
			[Bindable]
			private var ClientsList:XML;
			private function getXmlClientsHandler(event:ResultEvent):void{
				ClientsList = event.result as XML;
			}
 
			/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
			///////////////////////////////////////////////////////GESTION DES FAMILLES//////////////////////////////////////////////////////////////
			/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
 
			private function getFamilles():void{
					getXmlFamilles.send();
			}
 
			//Génération de la liste des clients
			[Bindable]
			public var FamillesList:XML;
			private function getXmlFamillesHandler(event:ResultEvent):void{
				FamillesList = event.result as XML;
			}
 
			//Tableau de données pour remplir la liste des disponiblités
			public var DispoList:Array = [{label:"En Veille", data:"0"},{label:"Actif", data:"1"}];
 
			//Fonction de création de la famille en BDD
			private function createfamille():void{
				//On test si les champs sont complets
				if(nom_fr.text == ""){
					mx.controls.Alert.show('Veuillez entrer un libéllé en Français');
					return;
				}else if(nom_en.text == ""){
					mx.controls.Alert.show('Veuillez entrer un libéllé en Anglais');
					return;
				}else if(nom_es.text == ""){
					mx.controls.Alert.show('Veuillez entrer un libéllé en Espagnol');
					return;
				}else if(ordre.text == ""){
					mx.controls.Alert.show('Veuillez entrer une position pour le menu');
					return;
				}
 
				//On met toutes les données à envoyer au php dans un objet
				var createfamille:Object = new Object;
				createfamille.nom_fr = nom_fr.text;
				createfamille.nom_en = nom_en.text;
				createfamille.nom_es = nom_es.text;
				createfamille.position = ordre.text;
				createfamille.actif = combo_actif.selectedItem.data;
 
				//On envoi l'objet au service
				sendCreateFamille.send(createfamille);
 
				//On vide le formulaire
				nom_fr.text ="";
				nom_en.text ="";
				nom_es.text ="";
				ordre.text ="";
			}
 
			//rafraichissement du tableau de famille
			private function createfamilleResultHandler(event:ResultEvent):void{
				mx.controls.Alert.show('Famille créée avec succés');
				//mise a jour de la liste de famille
				getFamilles();
			}
 
			//Envoi l'id_famille pour recuperer les infos avant la modification
			private function Modification_Famille():void  {
				//Envoi du code famille pour recuperer les données
				var data:Object = new Object();
				data.id_famille = dg_familles.selectedItem.id_famille;
				get_famille.send(data);	
			}
 
			//Insertions des informations Famille dans les champs pour la modification
			private var familleXml:XML;
			private function getFamilleHandler(event:ResultEvent):void{
				familleXml = event.result as XML;
				m_nom_fr.text = familleXml.nom_fr;
				m_nom_en.text = familleXml.nom_en;
				m_nom_es.text = familleXml.nom_es;
				m_ordre.text = familleXml.position;
				m_id_famille.text = familleXml.id_famille;
 
				//selection de l'etat de disponibilité
				m_combo_actif.selectedIndex = familleXml.actif;
			}
 
			//Mise à jour du client en BDD
			private function updatefamille():void{
				//On test si les champs sont complets
				if(m_nom_fr.text == ""){
					mx.controls.Alert.show('Veuillez entrer un libéllé en Français');
					return;
				}else if(m_nom_en.text == ""){
					mx.controls.Alert.show('Veuillez entrer un libéllé en Anglais');
					return;
				}else if(m_nom_es.text == ""){
					mx.controls.Alert.show('Veuillez entrer un libéllé en Espagnol');
					return;
				}else if(m_ordre.text == ""){
					mx.controls.Alert.show('Veuillez entrer une position pour le menu');
					return;
				}
 
				//On met les champs a envoyer au php dans un objet
				var updatefamille:Object = new Object;
				updatefamille.nom_fr = m_nom_fr.text;
				updatefamille.nom_en = m_nom_en.text;
				updatefamille.nom_es = m_nom_es.text;
				updatefamille.position = m_ordre.text;
				updatefamille.actif = m_combo_actif.selectedItem.data;
				updatefamille.id_famille = m_id_famille.text;
 
				//Envoi de l'objet au service
				sendEditFamille.send(updatefamille);
			}
 
			//rafraichissement du tableau de famille
			private function updatefamilleResultHandler(event:ResultEvent):void{
				mx.controls.Alert.show('Famille modifiée avec succés');
				//On efface les champs suite à la modif
				m_nom_fr.text = "";
				m_nom_en.text = "";
				m_nom_es.text = "";
				m_ordre.text = "";
				m_id_famille.text = "";
				//mise a jour de la liste de famille
				getFamilles();
			}
 
			/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
			//////////////////////////////////////////////////// GESTION DES FOURNISSEURS //////////////////////////////////////////////////////////
			/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
 
			//Recupere les fournisseurs avec la recherche si présente.
			private function getFournisseurs():void{
				if(recherche_f.text != '') {
					var data_f:Object = new Object();
					data_f.recherche = recherche_f.text;
					getXmlFournisseurs.send(data_f);
				}else{
					getXmlFournisseurs.send();
				}
			}
 
			//Génération de la liste des fournisseurs
			[Bindable]
			public var FournisseursList:XML;
			private function getXmlFournisseursHandler(event:ResultEvent):void{
				FournisseursList = event.result as XML;
			}
 
			//Ouverture de la Popup de création de fournisseur
			public var CreationFournisseur:Creation_Fournisseur;
			private function popUpCreation_Fournisseur():void  {
				CreationFournisseur = new Creation_Fournisseur();		
				PopUpManager.addPopUp(CreationFournisseur, this, true);
				PopUpManager.centerPopUp(CreationFournisseur);
				PopUpManager.bringToFront(CreationFournisseur);
			}
 
			//Ouverture de la Popup de Modification de fournisseur
			public var ModifFournisseur:Modification_Fournisseur;
			private function popUpModification_Fournisseur():void  {
				ModifFournisseur = new Modification_Fournisseur();
				ModifFournisseur.id_fournisseur = dg_fournisseur.selectedItem.id_fournisseur; 
				PopUpManager.addPopUp(ModifFournisseur, this, true);
				PopUpManager.centerPopUp(ModifFournisseur);
				PopUpManager.bringToFront(ModifFournisseur);
			}
 
			//Génération de la liste des départements
			[Bindable]
			public var ListdepartementXml:XML;
			private function getDepartementHandler(event:ResultEvent):void{ 
				ListdepartementXml = event.result as XML;
			}
 
			//Rafraichis le tableau de fournisseur
			public function rafraichir_fournisseur():void{
				getXmlFournisseurs.send();
			}
 
			/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
			////////////////////////////////////////////////////  GESTION DES APPELATIONS  //////////////////////////////////////////////////////////
			/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
 
			//Recupere les appelations avec la recherche si présente.
			private function getAppelations():void{
				if(recherche_a.text != '') {
					var data_a:Object = new Object();
					data_a.recherche = recherche_a.text;
					getXmlAppelations.send(data_a);
				}else{
					getXmlAppelations.send();
				}
			}
 
			//Génération de la liste des appelations
			[Bindable]
			public var AppelationsList:XML;
			private function getXmlAppelationsHandler(event:ResultEvent):void{
				AppelationsList = event.result as XML;
			}
 
			//Rafraichis le tableau des appelations
			public function rafraichir_appelation():void{
				getXmlAppelations.send();
			}
 
			//Ouverture de la Popup de création d'une appelation
			public var CreationAppelation:Creation_Appelation;
			private function popUpCreation_Appelation():void  {
				CreationAppelation = new Creation_Appelation();		
				PopUpManager.addPopUp(CreationAppelation, this, true);
				PopUpManager.centerPopUp(CreationAppelation);
				PopUpManager.bringToFront(CreationAppelation);
			}
 
			//Ouverture de la Popup de Modification d'une appelation
			public var ModifAppelation:Modification_Appelation;
			private function popUpModification_Appelation():void  {
				ModifAppelation = new Modification_Appelation();
				ModifAppelation.id_appelation = dg_appelation.selectedItem.id_appelation; 
				PopUpManager.addPopUp(ModifAppelation, this, true);
				PopUpManager.centerPopUp(ModifAppelation);
				PopUpManager.bringToFront(ModifAppelation);
			}
 
			/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
			//////////////////////////////////////////////////////  GESTION DES PRODUITS  ///////////////////////////////////////////////////////////
			/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
 
			//Recupere les produits avec la recherche si présente.
			private function getProduits():void{
				var data_p:Object = new Object();
				if(rp_fournisseur.selectedIndex >= 0) {
					data_p.id_fournisseur = rp_fournisseur.selectedItem.id_fournisseur;
				}
				if(rp_appelation.selectedIndex >= 0) {
					data_p.id_appelation = rp_appelation.selectedItem.id_appelation;
				}
				if(rp_nom.text != '') {
					data_p.nom = rp_nom.text;
				}
				getXmlProduits.send(data_p);
			}
 
			//Génération de la liste des produits
			[Bindable]
			private var ProduitsList:XML;
			private function getXmlProduitsHandler(event:ResultEvent):void{
				ProduitsList = event.result as XML;
			}
 
			//Ouverture de la Popup de création de client
			public var CreationProduit:Creation_Produit;
			private function popUpCreation_Produit():void  {
				CreationProduit = new Creation_Produit();		
				PopUpManager.addPopUp(CreationProduit, this, true);
				PopUpManager.centerPopUp(CreationProduit);
				PopUpManager.bringToFront(CreationProduit);
			}
 
			//Rafraichis le tableau des produits
			public function rafraichir_produit():void{
				getXmlProduits.send();
			}
 
			//Ouverture de la Popup de Modification de produit
			public var ModifProduit:Modification_Produit;
			private function popUpModification_Produit():void  {
				ModifProduit = new Modification_Produit();		
				ModifProduit.id_produit = dg_produits.selectedItem.id_produit; 
				PopUpManager.addPopUp(ModifProduit, this, true);
				PopUpManager.centerPopUp(ModifProduit);
				PopUpManager.bringToFront(ModifProduit);
			}
 
 
			/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
			////////////////////////////////////////////////////  GESTION DES ACTUALITES   //////////////////////////////////////////////////////////
			/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
 
			//Recupere les actualités avec la recherche si présente.
			private function getActualites():void{
				if(recherche_actu.text != '') {
					var data_actu:Object = new Object();
					data_actu.recherche = recherche_actu.text;
					getXmlActualites.send(data_actu);
				}else{
					getXmlActualites.send();
				}
			}
 
			//Génération de la liste des appelations
			[Bindable]
			public var ActualitesList:XML;
			private function getXmlActualitesHandler(event:ResultEvent):void{
				ActualitesList = event.result as XML;
			}
 
			//Rafraichis le tableau des appelations
			public function rafraichir_actualites():void{
				getXmlActualites.send();
			}
 
			//Ouverture de la Popup de création d'une appelation
			public var CreationActualite:Creation_Actualite;
			private function popUpCreation_Actualite():void  {
				CreationActualite = new Creation_Actualite();		
				PopUpManager.addPopUp(CreationActualite, this, true);
				PopUpManager.centerPopUp(CreationActualite);
				PopUpManager.bringToFront(CreationActualite);
			}
 
 
 
		]]>
	</fx:Script>
	<fx:Declarations>
		<mx:HTTPService id="get_pays" url="http://www.xxx.fr/test/admin/xml/liste_pays.php" result="getPaysHandler(event)" resultFormat="e4x" showBusyCursor="true"/>
		<mx:HTTPService id="get_departements" url="http://www.xxx.fr/test/admin/xml/liste_departements.php" result="getDepartementHandler(event)" resultFormat="e4x" showBusyCursor="true"/>
		<mx:HTTPService id="getXmlClients" url="http://www.xxx.fr/test/admin/xml/liste_clients.php" result="getXmlClientsHandler(event)" useProxy="false" method="POST" resultFormat="e4x" showBusyCursor="true"/>
		<mx:HTTPService id="getXmlFournisseurs" url="http://www.xxx.fr/test/admin/xml/liste_fournisseurs.php" result="getXmlFournisseursHandler(event)" useProxy="false" method="POST" resultFormat="e4x" showBusyCursor="true"/>
		<mx:HTTPService id="getXmlAppelations" url="http://www.xxx.fr/test/admin/xml/liste_appelations.php" result="getXmlAppelationsHandler(event)" useProxy="false" method="POST" resultFormat="e4x" showBusyCursor="true"/>
		<mx:HTTPService id="getXmlActualites" url="http://www.xxx.fr/test/admin/xml/liste_actualites.php" result="getXmlActualitesHandler(event)" useProxy="false" method="POST" resultFormat="e4x" showBusyCursor="true"/>
		<mx:HTTPService id="getXmlProduits" url="http://www.xxx.fr/test/admin/xml/liste_produits.php" result="getXmlProduitsHandler(event)" useProxy="false" method="POST" resultFormat="e4x" showBusyCursor="true"/>
		<mx:HTTPService id="getXmlFamilles" url="http://www.xxx.fr/test/admin/xml/liste_familles.php" result="getXmlFamillesHandler(event)" useProxy="false" method="POST" resultFormat="e4x" showBusyCursor="true"/>
		<mx:HTTPService id="sendCreateFamille" showBusyCursor="true" url="http://www.xxx.fr/test/admin/xml/creation_famille.php" method="POST" result="createfamilleResultHandler(event)" resultFormat="text" />
		<mx:HTTPService id="get_famille" showBusyCursor="true" resultFormat="e4x" result="getFamilleHandler(event)" url="http://www.xxx.fr/test/admin/xml/get_famille.php" />
		<mx:HTTPService  id="sendEditFamille" showBusyCursor="true" url="http://www.xxx.fr/test/admin/xml/modif_famille.php" method="POST" result="updatefamilleResultHandler(event)" resultFormat="text" />
		<!-- Placer ici les éléments non visuels (services et objets de valeur, par exemple). -->
	</fx:Declarations>
	<mx:TabNavigator x="10" y="10" width="1043" height="554" backgroundColor="#E9E9E9" creationPolicy="all">
 
		<!-- ACCUEIL -->
 
		<s:NavigatorContent width="100%" height="100%" label="Accueil">
			<s:Image x="216" y="43" source="assets/logo.jpg"/>
		</s:NavigatorContent>
 
		<!-- GESTION DES CLIENTS -->
 
		<s:NavigatorContent width="100%" height="100%" label="Clients" backgroundColor="#E9E9E9">
			<mx:DataGrid id="dataGrid" x="10" y="48" width="1021" height="462"
						dataProvider="{ClientsList.client}" doubleClick="popUpModification_Client()"
						doubleClickEnabled="true" rowCount="4">
				<mx:columns>
						<mx:DataGridColumn width="60" dataField="id_client" headerText="ID"/>
						<mx:DataGridColumn width="200" dataField="nom" headerText="Nom du client"/>
						<mx:DataGridColumn width="70" dataField="code_postal" headerText="Code Postal"/>
						<mx:DataGridColumn width="160" dataField="ville" headerText="Ville"/>
						<mx:DataGridColumn width="60" dataField="code_pays" headerText="Pays"/>
						<mx:DataGridColumn width="100" dataField="tel" headerText="Tél."/>
						<mx:DataGridColumn width="120" dataField="date_saisie" headerText="Ancienneté"/>
						<mx:DataGridColumn width="100" dataField="nb_commande" headerText="Nb Commande"/>
						<mx:DataGridColumn dataField="newsletter" headerText="News."/>
				</mx:columns>
			</mx:DataGrid>
			<s:TextInput id="recherche" x="10" y="10" change="getClients()"/>
			<s:Button x="142" y="10" label="Rechercher" id="lancer_recherche" click="getClients()"/>
			<s:Button x="922" y="10" label="Ajouter un client" click="popUpCreation_Client()"/>
			<s:Label x="436" y="24" fontSize="11" text="Doublecliquer sur le client à modifier"/>
			<s:Label x="464" y="10" fontSize="14" fontWeight="bold" text="Liste des clients"/>
		</s:NavigatorContent>
 
		<!-- GESTION DES PRODUITS -->
 
		<s:NavigatorContent width="100%" height="100%" label="Produits">
			<s:TextInput id="rp_nom" x="165" y="10" change="getProduits()"/>
			<s:Button x="914" y="10" label="Ajouter un produit" click="popUpCreation_Produit()"/>
			<s:Label x="10" y="20" fontWeight="bold" text="Rechercher par :"/>
			<s:Label x="129" y="20" text="Nom :"/>
			<s:Label x="316" y="20" text="Fournisseur :"/>
			<s:Label x="606" y="21" text="Appelation :"/>
			<mx:DataGrid id="dg_produits" x="10" y="48" width="1021" height="462"
						 dataProvider="{ProduitsList.produit}"
						 doubleClick="popUpModification_Produit()" doubleClickEnabled="true"
						 rowCount="4" variableRowHeight="true">
				<mx:columns>
						<mx:DataGridColumn width="50" dataField="id_produit" headerText="ID"/>
						<mx:DataGridColumn width="190" dataField="nom" headerText="Nom du produit"/>
						<mx:DataGridColumn width="130" dataField="appelation" headerText="Appelation"/>
						<mx:DataGridColumn width="100" dataField="famille" headerText="Famille"/>
						<mx:DataGridColumn width="130" dataField="fournisseur" headerText="Fournisseur"/>
						<mx:DataGridColumn width="55" dataField="annee" headerText="Année"/>
						<mx:DataGridColumn width="90" dataField="contenance" headerText="Contenance"/>
						<mx:DataGridColumn width="60" dataField="stock" headerText="Stock"/>
						<mx:DataGridColumn width="80" dataField="prix" headerText="Prix"/>
						<mx:DataGridColumn width="60" dataField="reduction" headerText="Réduc."/>
						<mx:DataGridColumn width="85" dataField="date_saisie" headerText="Date"/>
						<mx:DataGridColumn width="80" dataField="actif" headerText="Disponbilité"/>
				</mx:columns>
			</mx:DataGrid>
			<mx:ComboBox id="rp_fournisseur" x="398" y="10" width="189"
						 dataProvider="{FournisseursList.fournisseur}"
						 labelField="nom" prompt="Selectionnez" change="getProduits()">
			</mx:ComboBox>
			<mx:ComboBox id="rp_appelation" x="675" y="10" width="189"
						 dataProvider="{AppelationsList.appelation}"
						 labelField="nom" prompt="Selectionnez" change="getProduits()">
			</mx:ComboBox>
		</s:NavigatorContent>
 
		<!-- GESTION DES FAMILLES -->
 
		<s:NavigatorContent width="100%" height="100%" label="Familles">
			<mx:DataGrid id="dg_familles" x="22" y="71" width="350" height="243" rowCount="4" dataProvider="{FamillesList.famille}" doubleClick="Modification_Famille()" doubleClickEnabled="true">
				<mx:columns>
					<mx:DataGridColumn width="60" dataField="id_famille" headerText="ID"/>
					<mx:DataGridColumn width="200" dataField="nom" headerText="Libéllé"/>
					<mx:DataGridColumn width="60" dataField="position" headerText="Ordre"/>
					<mx:DataGridColumn width="60" dataField="actif" headerText="Actif"/>
				</mx:columns>
			</mx:DataGrid>
			<s:Label x="22" y="28" fontSize="14" fontWeight="bold" text="Familles de produit :"/>
			<s:Label x="746" y="28" fontSize="14" fontWeight="bold" text="Création d'une famille :"/>
			<s:Label x="22" y="44" text="Correspond au menu du site"/>
			<s:Label x="425" y="44" text="Doublecliquer sur la famille à modifier."/>
			<s:Label x="746" y="80" text="Libéllé FR :"/>
			<s:TextInput id="nom_fr" x="827" y="70" width="189"/>
			<s:Label x="746" y="110" text="Libéllé EN :"/>
			<s:TextInput id="nom_en" x="827" y="100" width="189"/>
			<s:Label x="746" y="140" text="Libéllé ES :"/>
			<s:TextInput id="nom_es" x="827" y="130" width="189"/>
			<s:Label x="746" y="170" text="Ordre :"/>
			<s:Label x="746" y="201" text="Actif :"/>
			<s:TextInput id="ordre" x="827" y="160" width="77"/>
			<mx:ComboBox id="combo_actif" x="827" y="191" width="189" dataProvider="{DispoList}" />
			<s:Button x="911" y="233" label="Creer la famille" click="createfamille()"/>
			<s:Label x="425" y="28" fontSize="14" fontWeight="bold" text="Modification d'une famille :"/>
			<s:Label x="425" y="110" text="Libéllé FR :"/>
			<s:TextInput id="m_nom_fr" x="506" y="100" width="189"/>
			<s:Label x="425" y="140" text="Libéllé EN :"/>
			<s:TextInput id="m_nom_en" x="506" y="130" width="189"/>
			<s:Label x="425" y="170" text="Libéllé ES :"/>
			<s:TextInput id="m_nom_es" x="506" y="160" width="189"/>
			<s:Label x="425" y="200" text="Ordre :"/>
			<s:Label x="425" y="231" text="Actif :"/>
			<s:TextInput id="m_ordre" x="506" y="190" width="77"/>
			<mx:ComboBox id="m_combo_actif" x="506" y="221" width="189" dataProvider="{DispoList}" />
			<s:Button x="590" y="263" label="Modifier la famille" click="updatefamille()"/>
			<mx:VRule x="721" y="69" width="1" height="243"/>
			<mx:VRule x="400" y="72" width="1" height="243"/>
			<s:Label x="425" y="80" text="ID Famille :"/>
			<s:TextInput id="m_id_famille" x="506" y="70" width="51" enabled="false"/>
		</s:NavigatorContent>
 
		<!-- GESTION DES FOURNISSEURS -->
 
		<s:NavigatorContent width="100%" height="100%" label="Fournisseurs">
			<s:TextInput id="recherche_f" x="10" y="10" change="getFournisseurs()" enabled="true"/>
			<s:Button x="142" y="10" label="Rechercher" id="lancer_recherche_f" click="getFournisseurs()"/>
			<s:Button x="889" y="10" label="Ajouter un fournisseur" click="popUpCreation_Fournisseur()"/>
			<mx:DataGrid id="dg_fournisseur" x="10" y="48" width="1021" height="462"
						dataProvider="{FournisseursList.fournisseur}" doubleClick="popUpModification_Fournisseur()"
						doubleClickEnabled="true" rowCount="4">
				<mx:columns>
						<mx:DataGridColumn width="40" dataField="id_fournisseur" headerText="ID"/>
						<mx:DataGridColumn width="250" dataField="nom" headerText="Nom du fournisseur"/>
						<mx:DataGridColumn width="170" dataField="commune" headerText="Commune"/>
						<mx:DataGridColumn width="90" dataField="departement" headerText="Département"/>
						<mx:DataGridColumn width="80" dataField="annee_creation" headerText="Création"/>
						<mx:DataGridColumn width="75" dataField="actif" headerText="Actif"/>
						<mx:DataGridColumn width="75" dataField="recoltant" headerText="Recoltant"/>
						<mx:DataGridColumn width="75" dataField="negociant" headerText="Négociant"/>
						<mx:DataGridColumn dataField="date_saisie" headerText="Date saisie"/>
				</mx:columns>
			</mx:DataGrid>
			<s:Label x="417" y="25" fontSize="11" text="Doublecliquer sur le fournisseur à modifier"
					 verticalAlign="middle"/>
			<s:Label x="440" y="10" fontSize="14" fontWeight="bold" text="Liste des fournisseurs"
					 verticalAlign="middle"/>
		</s:NavigatorContent>
 
		<!-- GESTION DES APPELATIONS -->
 
		<s:NavigatorContent width="100%" height="100%" label="Appelations">
			<s:TextInput id="recherche_a" x="10" y="10" change="getAppelations()" enabled="true"/>
			<s:Button x="142" y="10" label="Rechercher" id="lancer_recherche_a" click="getAppelations()"/>
			<s:Button x="885" y="10" label="Ajouter une appelation" click="popUpCreation_Appelation()"/>
			<mx:DataGrid id="dg_appelation" x="10" y="48" width="1021" height="462"
						 dataProvider="{AppelationsList.appelation}"
						 doubleClick="popUpModification_Appelation()" doubleClickEnabled="true"
						 rowCount="4" variableRowHeight="true">
				<mx:columns>
					<mx:DataGridColumn width="40" dataField="id_appelation" headerText="ID"/>
					<mx:DataGridColumn width="300" dataField="nom" headerText="Nom de l'appelation"/>
					<mx:DataGridColumn width="100" dataField="departement" headerText="Département"/>
					<mx:DataGridColumn width="100" dataField="superficie" headerText="Superficie"/>
					<mx:DataGridColumn width="100" dataField="production" headerText="Production"/>
					<mx:DataGridColumn width="300" dataField="cepages" headerText="Cépages"/>
					<mx:DataGridColumn dataField="nb_produits" headerText="Nb Produits"/>
				</mx:columns>
			</mx:DataGrid>
			<s:Label x="427" y="25" fontSize="11" text="Doublecliquer sur l'appelation à modifier"
					 verticalAlign="middle"/>
			<s:Label x="447" y="10" fontSize="14" fontWeight="bold" text="Liste des appelations"
					 verticalAlign="middle"/>
		</s:NavigatorContent>
 
		<!-- GESTION DES ACTUALITES  -->
 
		<s:NavigatorContent width="100%" height="100%" label="Actualités">
			<s:TextInput id="recherche_actu" x="10" y="10" change="getActualites()" enabled="true"/>
			<s:Button x="142" y="10" label="Rechercher" id="lancer_recherche_actu" click="getActualites()"/>
			<s:Button x="898" y="10" label="Ajouter une actualité" click="popUpCreation_Actualite()"/>
			<mx:DataGrid id="dg_actualite" x="10" y="48" width="1021" height="462"
						 dataProvider="{ActualitesList.actualite}"
						 rowCount="4" variableRowHeight="true">
				<mx:columns>
					<mx:DataGridColumn width="40" dataField="id_actualite" headerText="ID"/>
					<mx:DataGridColumn width="300" dataField="titre" headerText="Titre de l'actualité"/>
					<mx:DataGridColumn width="100" dataField="date_saisie" headerText="Date"/>
					<mx:DataGridColumn width="100" dataField="actif" headerText="Actif"/>
				</mx:columns>
			</mx:DataGrid>
			<s:Label x="430" y="25" fontSize="11" text="Doublecliquer sur l'actualité à modifier"
					 verticalAlign="middle"/>
			<s:Label x="451" y="10" fontSize="14" fontWeight="bold" text="Liste des actualités"
					 verticalAlign="middle"/>
		</s:NavigatorContent>
	</mx:TabNavigator>
</s:Application>
Un composant contenant un formulaire :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
<?xml version="1.0" encoding="utf-8"?>
<s:Group xmlns:fx="http://ns.adobe.com/mxml/2009" 
		 xmlns:s="library://ns.adobe.com/flex/spark" 
		 xmlns:mx="library://ns.adobe.com/flex/mx" width="834" height="520">
	<fx:Script>
		<![CDATA[
 
			//Importation des composants
			import mx.controls.Alert;
			import mx.events.FlexEvent;
			import mx.managers.PopUpManager;
			import mx.messaging.SubscriptionInfo;
			import mx.rpc.events.ResultEvent;
			public var fileRef:FileReference = new FileReference();
			import flash.events.Event;
 
			//Fonction mermettant de fermer la Popup
			private function closePopUp():void{
				PopUpManager.removePopUp(this);
			}
 
			//données pour alimenter la liste déroulante de disponiblité
			public var DispoList:Array = [{label:"En Veille", data:"0"},{label:"Actif", data:"1"}];
 
			//Fonction de création de l'actualité en BDD
			private function createactualite():void{
				//On test si les champs sont complets
				if(actu_titre_fr.text == ""){
					mx.controls.Alert.show('Veuillez entrer un titre Français');
					return;
				}else if(actu_titre_en.text == ""){
					mx.controls.Alert.show('Veuillez entrer un titre Anglais');
					return;
				}else if(actu_titre_es.text == ""){
					mx.controls.Alert.show('Veuillez entrer un titre Espagnol');
					return;
				}else if(actu_contenu_fr.text == ""){
					mx.controls.Alert.show('Veuillez entrer un contenu Français');
					return;
				}else if(actu_contenu_en.text == ""){
					mx.controls.Alert.show('Veuillez entrer un contenu Anglais');
					return;
				}else if(actu_contenu_es.text == ""){
					mx.controls.Alert.show('Veuillez entrer un contenu Espagnol');
					return;
				}
 
				//On met toutes les données à envoyer au php dans un objet
				var createactualite:Object = new Object;
				createactualite.titre_fr = actu_titre_fr.text;
				createactualite.titre_en = actu_titre_en.text;
				createactualite.titre_es = actu_titre_es.text;
				createactualite.contenu_fr = actu_contenu_fr.text;
				createactualite.contenu_en = actu_contenu_en.text;
				createactualite.contenu_es = actu_contenu_es.text;
				createactualite.actif = actu_actif.selectedItem.data;
 
				//On envoi l'objet au service
				sendCreateActualite.send(createactualite);
			}
 
			//rafraichissement du tableau des actualite de la page parent et fermeture de la popup
			private function createactualiteResultHandler(event:ResultEvent):void{
				//mise a jour de la liste de actualites
				parentApplication.rafraichir_actualite();
				//fermeture de la fenetre en cours
				closePopUp();
			}
 
 
		]]>
	</fx:Script>
	<fx:Declarations>
		<!-- Placer ici les éléments non visuels (services et objets de valeur, par exemple). -->
		<s:HTTPService showBusyCursor="true" id="sendCreateActualite" url="http://www.xxx.fr/test/admin/xml/creation_actualite.php" method="POST" result="createactualiteResultHandler(event)" resultFormat="text" />
	</fx:Declarations>
	<s:Panel x="0" y="0" width="834" height="520" backgroundColor="#E9E9E9"
			 title="Création d'une actualité">
		<mx:TabNavigator x="11" y="150" width="811" height="277" backgroundColor="#F0F0F0">
			<s:NavigatorContent width="100%" height="100%" label="FR">
				<s:Label x="10" y="42" text="Titre :"/>
				<s:TextInput id="actu_titre_fr" x="119" y="32" width="680"/>
				<s:Label x="10" y="62" text="Contenu :"/>
				<s:TextArea id="actu_contenu_fr" x="119" y="62" width="680" height="169"/>
				<s:Label x="10" y="10" fontWeight="bold" text="FRANCAIS" textDecoration="underline"/>
			</s:NavigatorContent>
			<s:NavigatorContent width="100%" height="100%" label="EN">
				<s:Label x="10" y="42" text="Titre :"/>
				<s:TextInput id="actu_titre_en" x="119" y="32" width="680"/>
				<s:Label x="10" y="62" text="Contenu :"/>
				<s:TextArea id="actu_contenu_en" x="119" y="62" width="680" height="169"/>
				<s:Label x="10" y="10" fontWeight="bold" text="ANGLAIS" textDecoration="underline"/>
			</s:NavigatorContent>
			<s:NavigatorContent width="100%" height="100%" label="ES">
				<s:Label x="10" y="42" text="Titre :"/>
				<s:TextInput id="actu_titre_es" x="119" y="32" width="680"/>
				<s:Label x="10" y="62" text="Contenu :"/>
				<s:TextArea id="actu_contenu_es" x="119" y="62" width="680" height="169"/>
				<s:Label x="10" y="10" fontWeight="bold" text="ESPAGNOL" textDecoration="underline"/>
			</s:NavigatorContent>
		</mx:TabNavigator>
		<s:Label x="10" y="18" fontWeight="bold" text="Disponibilité :"/>
		<mx:ComboBox id="actu_actif" x="96" y="12" width="189" dataProvider="{DispoList}" prompt="Selectionnez"/>
		<s:Button x="716" y="456" label="Creer l'actualité" click="createactualite()" />
		<s:Button x="638" y="456" label="Annuler" click="closePopUp()"/>
		<s:Label x="540" y="17" text="Photo de l'actualité :" verticalAlign="middle"/>
		<s:Image id="photo1" x="660" y="11" width="160" height="120"/>
		<s:Button x="707" y="137" label="Choisir" click="createactualite()"/>
	</s:Panel>
</s:Group>
Le debogueur me renvoi au bout de code suivant du fichier TabNavigator.as :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
/**
     *  @private
     */
    override protected function keyDownHandler(event:KeyboardEvent):void
    {
        if (focusManager.getFocus() == this)
        {
            // Redispatch the event from the TabBar so that it can handle it.
            tabBar.dispatchEvent(event);
        }
    }
Voilà tout, si quelqu'un arrivait à m'orienter dans mes recherches...

Merci par avance