Menu en XML...comment faire? [Résolu]

sphaxslayer 216 Messages postés mardi 5 avril 2005Date d'inscription 17 septembre 2008 Dernière intervention - 20 avril 2005 à 15:13 - Dernière réponse : MorpionMx 3489 Messages postés lundi 16 octobre 2000Date d'inscription 30 octobre 2008 Dernière intervention
- 22 avril 2005 à 15:23
Salut tout le monde...
J'ai un souci avec un fichier XML...alors je suis sous Visual C# et j'ai un menu composé de 3 boutons, de 3 linklabels et d'un listBox...ce que j'aimerais faire, c'est que les textes affichés tant sur les boutons que par les linkabels que dans la listbox soient piochés dans un fichier XML...le hic c'est que je ne sais pas comment m'y prendre ! je découvre le XML et ai déjà épluché 2 tuto et demi (le 3eme est en cours...) mais je reste un peu dans le flou...de même j'ai trouvé une très bonne description des classes XmlTextReader et XmlTextWriter ici : http://www.supinfo-projects.com/2003/xml%5Fcsharp/0/
mais avant de me lancer dans ça je voudrais être sûr que mon fichier est correct...enfin s'il s'organise bien...je vous le présente, si vous pouviez me dire les problèmes qu'il y a svp...merci beaucoup

<?xml version="1.0" encoding="ISO-8859-1"?>
<!-- ce fichier XML donne l'arborescence du menu -->
<menu_rech>

<rech_msgs>Recherche de Messages
<mots_clefs>Par Mots Clefs</mots_clefs>
<texte_libre>Par Texte Libre</texte_libre>
<statut>Par Statut</statut>
<list_interf>Liste des Interfaces
<contenu_liste>SELECT interf FROM interface;</contenu_liste>
</list_interf>
</rech_msgs>

<gest_abonnes>Gestion des Abonnés</gest_abonnes>

</menu_rech>

Merci pour toutes remarques,aides, je suis vraiment débutant et je ne vois pas du tout comment m'y prendre pour effectuer cette initialisation du menu via ce fichier...

"Un seul Être vous manque, et tout est dépeuplé..."
Afficher la suite 

Votre réponse

20 réponses

Meilleure réponse
MorpionMx 3489 Messages postés lundi 16 octobre 2000Date d'inscription 30 octobre 2008 Dernière intervention - 20 avril 2005 à 15:53
3
Merci
Si c'est juste pour afficher des libelles dans tes boutons ou labels,
tu devrais peut-etre plutot utiliser des ressources, ce serait plus
judicieux je pense.

Par contre, si apres tu dois utiliser ton fichier XML pour une autre raison, j'ai rien dit ^^



Bon, sinon ton fichier, je l'aurais plutot vu comme ca :

<menu_rech>

<rech_msgs str="Recherche de Messages">


<typ_rech>Par Mots Clefs</typ_rech>


<typ_rech>Par Texte Libre</typ_rech>


<typ_rech>Par Statut</typ_rech>

</rech_msgs>

<list_interf>Liste des Interfaces


<contenu_liste>SELECT interf FROM interface;</contenu_liste>

</list_interf>

<gest_abonnes>Gestion des Abonnés</gest_abonnes>

</menu_rech>



Mais je peux me tromper, et puis tout depend de comment tu as envie d'organiser tes données


Mx

Merci MorpionMx 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 102 internautes ce mois-ci

Commenter la réponse de MorpionMx
Meilleure réponse
MorpionMx 3489 Messages postés lundi 16 octobre 2000Date d'inscription 30 octobre 2008 Dernière intervention - 20 avril 2005 à 16:36
3
Merci
Les ressources c'est assez simple a utiliser.

Le principe : un identifiant = une chaine



Si tu utilises Visual studio :

Il te faut creer un fichier .resource ou .resx dans ton projet. Les
fichiers ressources seront "integres" dans ton exe (ou ta dll) a la
compilation.

Quand tu ouvres le fichier ressource, tu as le droit a un tableau avec
plusieurs champs. Le champ name l'identifiant, le champ value la
chaine que tu veux mettre



Ainsi, mettons par exemple :

Name = monButton

Value = Coucou



Ensuite dans le code de ton appli, rajoute les 2 espaces de nom comme suit :

using System.Resources;

using System.Reflection;



Pour acceder aux ressources, il faut un ResourceManager

private ResourceManager rm ;



Et ensuite tu l'instancies comme ca :



rm = new ResourceManager("WindowsApplication1.Resource1", Assembly.GetExecutingAssembly());



Il faut que tu remplaces WindowsApplication1.Resource1 par

[l'espace de nom de ton application].[Le nom de ton fichier ressource sans l'extension]



Et ensuite, pour acceder a une chaine



Button bt1 = new Button(); // je crée un bouton pour l'exemple

bt1.Text = rm.GetString("monButton"); // Demande au ResourceManager d'aller chercher la valeur "monBoutton"


Et roule



Les ressources te permettent aussi d'integrer toutes sortes de fichiers
(sons, images), et presentent aussi l'immense interet de permettre de
localiser les applis, c'est a dire, pour une meme appli, avoir
plusieurs langues, sans avoir a modifier quoique ce soit dans le code.



N'hésite pas a demander, si tu as des questions.

Mx

Merci MorpionMx 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 102 internautes ce mois-ci

Commenter la réponse de MorpionMx
sphaxslayer 216 Messages postés mardi 5 avril 2005Date d'inscription 17 septembre 2008 Dernière intervention - 20 avril 2005 à 16:05
0
Merci
décidément tu me sers de dictionnaire universel MX !
bah en fait, a l'affichage, j'ai 2 boutons dispo:

Recherche de Messages
Gestion des Abonnés

mais quand on clique sur le premier, ca fait un sous-menu avec les 3 linklabels et le 3eme boutons...voilà le schéma de mon menu

Recherche de Messages
Par Mots Clefs
Par Texte Libre
Par Statut

Liste des Interfaces
<là ma listBox>

Gestion des Abonnés

le truc, c'est que ce menu doit être dynamique pour qu'au cas où y'ai besoin de changer/ajouter des trucs ben ce soit faut dans le fichier xml plutot que dans le code directement....ce qui m'a amené a cette question: est-ce que cela veut dire que je dois implémenter mes boutons et leurs actions dans mon fichier XML aussi...?? :s:s auquel cas ce serait bien bien chiant, je reconnais...:( si je peux faire autremet ça serait mieux...
merci pour tes corrections, mais tu vois justement quand je dis que je suis perdu dans le XML c que je comprends pas très bien les balises à valeur...genre ton str ca donne le nom du groupe parent qui aura les 3 type-rech comme enfant, c bien ca...? et si oui, c bien cette chaine qui sera prise en compte lors de la lecture du fichier par XmlTextReader ? et encore une fois, si on continue par là, si ce que j'ai dit est correct, est-ce que la fonction va savoir prendre ce qu'il ya ENTRE les balises type_rech dans les fils...?
(je sais pas si c bien bien clair tout ca lol)

merci (encore!) en tous cas...tu m'aides beaucoup ;)

"Un seul Être vous manque, et tout est dépeuplé..."
Commenter la réponse de sphaxslayer
MorpionMx 3489 Messages postés lundi 16 octobre 2000Date d'inscription 30 octobre 2008 Dernière intervention - 20 avril 2005 à 16:17
0
Merci
Ma question est : est-ce que ce contenu du fichier est succeptible de
changer plus tard ?(je parle pas de pendant la phase de développement,
où là je me doute que c'est censer changer)

C'est a dire, par exemple, est ce qu'il peut y avoir avec le temps, d'autres balises comme :

Par Mots Clefs
Par Texte Libre
Par Statut




Et donc, est ce que ca va impliquer l'ajout dynamique de linklabel sans avoir a retoucher le code?

Ou alors, s'il y a des changements, est-ce que tu penses que ce sera avec recompilation du code ?

Parce que je pense vraiment que dans ton cas, il faut utiliser des
ressources, et que ca ne sert a rien de s'embeter avec du xml.



le "str", c'est ce qu'on appele un attribut. je l'ai mis la parce qu'il
concerne les 3 noeuds enfants. Maintenant, j'ai fait ca intuitivement,
je saurais pas t'expliquer la raison de "pourquoi il faut faire comme
ca" ;)


Mx
Commenter la réponse de MorpionMx
sphaxslayer 216 Messages postés mardi 5 avril 2005Date d'inscription 17 septembre 2008 Dernière intervention - 20 avril 2005 à 16:22
0
Merci
lol ok ok je pense que ton intuition est proche de celle du HTML enfin je pense avoir compris mais je ne suis pas spécialement capable d'expliquer non plus...enfin bref
oui je pense que des ressources seraient mieux car je pense qu'il n'y aura pas de modification dynamique sans recompilation...enfin je pense pas que ce soit nécessaire quoi...donc oui pour les ressources...mais...comment fait-on ça avec des ressources au fait...? :-$
merci

"Un seul Être vous manque, et tout est dépeuplé..."
Commenter la réponse de sphaxslayer
sphaxslayer 216 Messages postés mardi 5 avril 2005Date d'inscription 17 septembre 2008 Dernière intervention - 21 avril 2005 à 11:01
0
Merci
hmm...merci pour ta réponse...je vois comment ça simplifie vis-à-vis du XML, mais j'ai eu un peu de mal à m'en servir...toutefois j'y suis enfin arrivé ! Je vais décrire au cas où ça pourrait intéresser quelque personne que ce soit...voilà ce que j'ai fait...

- J'ai ajouté un fichier ressource à mon projet
- J'ajoute les 2 using que tu m'as cités (System.Reflection & System.Resources)
- Je déclare le RessourceManager dans la classe de mon appli
- J'ai rempli les champs de cette façon:
<name> <value> <type>
Bttn_RechMess Recherche de Messages System.String
LnkLabl_MotsClefs Par Mots Clefs System.String
. . . . . . . . . . . . . . .
- J'instancie le ResourceManager dans le constructeur
- Lorsque j'ai besoin d'afficher mes boutons/linklabels, c'est-à-dire lorsque je lance la connexion, je demande AVANT de les rendre Visibles (Visible=true) d'aller chercher les valeurs correspondantes dans le fichier de ressources
- Je lance mon application, et ça marche...

Je te remercie beaucoup ! ça m'aide considérablement !
Il ne me reste qu'à effectuer différents tests pour savoir si tout marche vraiment bien, a priori je dirais que oui...mais on n'est jamais trop prudent...

Il me reste quand même une dernière question:
pour la ListBox contenant une liste d'interfaces, je dois obtenir cette liste via une requête sur une base...Est-ce que mettre dans le fichier de ressource comme valeur "SELECT blabla etc" et mettre en type String auquel cas devrais-je faire une manip' particulière? ou dois-je m'y prendre autrement...? c'est la grosse interrogation qui demeure...

Merci encore!

"Un seul Être vous manque, et tout est dépeuplé..."
Commenter la réponse de sphaxslayer
MorpionMx 3489 Messages postés lundi 16 octobre 2000Date d'inscription 30 octobre 2008 Dernière intervention - 21 avril 2005 à 11:06
0
Merci
Je pense pas que ca pose un souci de mettre ta requete de type string,
puisque dans ton code, elle sera de type string aussi (Par exemple, si
tu utilises une instance d'objet OleDbcommand, la prorpiété CommandText
(qui correspond a la requete) est de type string.



Mais pourquoi ne pas la mettre en dur dans ton code ?

Mx
Commenter la réponse de MorpionMx
sphaxslayer 216 Messages postés mardi 5 avril 2005Date d'inscription 17 septembre 2008 Dernière intervention - 21 avril 2005 à 14:14
0
Merci
oui, j'y avais pensé mais si y'a besoin de changer la requête par la suite, c'est peut-être mieux de la laisser dans la config externe...ca assure une certaine pérènité de l'appli, nan? enfin sinon j'la mets dedans, c'est pas un GRAVE probleme c'est simplement un souci de portabilité temporelle :) (ohh que de grands mots! lol)

"Un seul Être vous manque, et tout est dépeuplé..."
Commenter la réponse de sphaxslayer
MorpionMx 3489 Messages postés lundi 16 octobre 2000Date d'inscription 30 octobre 2008 Dernière intervention - 21 avril 2005 à 14:18
0
Merci
Y'a pas grande différence. Dans les 2 cas tu vas devoir recompiler ton application.

Donc c'est a toi de faire comme tu preferes :p

Mx
Commenter la réponse de MorpionMx
sphaxslayer 216 Messages postés mardi 5 avril 2005Date d'inscription 17 septembre 2008 Dernière intervention - 21 avril 2005 à 14:22
0
Merci
ouais c'est vrai en fait...chu bete...lol j'ai pas réfléchi surce coup là ...

"Un seul Être vous manque, et tout est dépeuplé..."
Commenter la réponse de sphaxslayer
sphaxslayer 216 Messages postés mardi 5 avril 2005Date d'inscription 17 septembre 2008 Dernière intervention - 22 avril 2005 à 12:41
0
Merci
euuh...maître...j'ai encore un souci...
Voilà en fait j'ai une listeBox à remplir en dynamique aussi, enfin il faut que les éléments soient pris dans le fichier de ressources...Voilà le remplissage normal d'une ListBox



this.ComboBox_ListeBDD.Items.AddRange(
new
object[] {


"BASE N°1 ",


"BASE N°2 ",


"BASE N°3 ",


"... ... ... "});

voilà ce que j'ai essayé:


ComboBox_ListeBDD.Items.AddRange(
new
object[] {resManag.GetString("ComboBox_ListeBDD")});

sachant que dans mon fichier Resource.rscx j'ai mis:

<name> <value>
ComboBox_ListeBDD "BASE N°1 ", etc etc,"... ... ... "

tous les types sont en System.String...

le problème c'est qu'il n'y a qu'une ligne avec TOUT dans ma Liste...je voudrais savoir si c'est possible de réussir à faire qu'avec la String il reprenne toutes les bases...merci...

"Un seul Être vous manque, et tout est dépeuplé..."
Commenter la réponse de sphaxslayer
sphaxslayer 216 Messages postés mardi 5 avril 2005Date d'inscription 17 septembre 2008 Dernière intervention - 22 avril 2005 à 12:45
0
Merci
oups...bon on va la refaire hein....y'a un peu trop d'indéntation là ...

normalement:

this.ComboBox_ListeBDD.Items.AddRange(
new
object[] {


"BASE N°1 ",


"BASE N°2 ",


"BASE N°3 ",


"... ... ... "});


ce que j'ai fait:

ComboBox_ListeBDD.Items.AddRange(new
object[] {resManag.GetString("ComboBox_ListeBDD")});

ah oui et je précise...ce que j'ai fait, c'est dans le constructeur après l'appel de InitializeComponent(), dans laquelle j'ai viré le remplissage de liste...

"Un seul Être vous manque, et tout est dépeuplé..."
Commenter la réponse de sphaxslayer
MorpionMx 3489 Messages postés lundi 16 octobre 2000Date d'inscription 30 octobre 2008 Dernière intervention - 22 avril 2005 à 12:46
0
Merci
Tes libelles sont séparés par des virgule ?

Parce que sinon, tu fait

string[] mesLignes = leStringDesRessources.Split(',');



et tu recupérera un tableau de strings

mesLignes[0] = "Base 1 ..."

mesLignes[1] = "Base 2..."



etc.

Mx
Commenter la réponse de MorpionMx
sphaxslayer 216 Messages postés mardi 5 avril 2005Date d'inscription 17 septembre 2008 Dernière intervention - 22 avril 2005 à 13:01
0
Merci
donc tu voudrais que je fasses un truc du genre
string[] lstBDD = resManag.GetString("ComboBox_ListeBDD").Split(',');

et ensuite:
tant que ??
{
ComboBox_ListeBDD.Items.AddRange(lstBDD[i]);
i++;
}

mais dans le tant que, je sais pas dire "tant que lstBDD[i] existe"...

sinon est-ce que j'ai bien compris le principe ? :)

"Un seul Être vous manque, et tout est dépeuplé..."
Commenter la réponse de sphaxslayer
MorpionMx 3489 Messages postés lundi 16 octobre 2000Date d'inscription 30 octobre 2008 Dernière intervention - 22 avril 2005 à 13:23
0
Merci
for(int i = 0; i < lstBDD.Length; i++)

ComboBox_ListeBDD.Items.Add(lstBdd[i]);

Mx
Commenter la réponse de MorpionMx
sphaxslayer 216 Messages postés mardi 5 avril 2005Date d'inscription 17 septembre 2008 Dernière intervention - 22 avril 2005 à 14:05
0
Merci
OK! ben merci encore, je vais tester ça et je te tiens au courant :-)
merci de ton aide !

"Un seul Être vous manque, et tout est dépeuplé..."
Commenter la réponse de sphaxslayer
sphaxslayer 216 Messages postés mardi 5 avril 2005Date d'inscription 17 septembre 2008 Dernière intervention - 22 avril 2005 à 15:15
0
Merci
c'est cool ca marche merci! sauf qu'il me reste un petit problème que je n'arrive pas à localiser...
voilà le code:

string [] lstBDD = resManag.GetString("ComboBox_ListeBDD").Split(',');



for (
int i=0; i<lstBDD.Length; i++)


{


ComboBox_ListeBDD.Items.Add(lstBDD[i]);


}

et le résultat dans la ComboBox:

BASE N°1 ,BASE N°2 ,BASE N°3 ,... ... ...
BASE N°1
BASE N°2
BASE N°3
... ... ...

(les couleurs c pour différencier les lignes...la couleur change <=> c'est la ligne suivante...)

"Un seul Être vous manque, et tout est dépeuplé..."
Commenter la réponse de sphaxslayer
MorpionMx 3489 Messages postés lundi 16 octobre 2000Date d'inscription 30 octobre 2008 Dernière intervention - 22 avril 2005 à 15:18
0
Merci
Tu dois avoir oublié d'enlever une ligne de ton ancien code qui ajoute
BASE N°1 ,BASE N°2 ,BASE N°3 ,... ... ...

a ton combobox non ?



genre cette ligne la :

ComboBox_ListeBDD.Items.AddRange(new

object[] {resManag.GetString("ComboBox_ListeBDD")});






Mx
Commenter la réponse de MorpionMx
sphaxslayer 216 Messages postés mardi 5 avril 2005Date d'inscription 17 septembre 2008 Dernière intervention - 22 avril 2005 à 15:21
0
Merci
effectivement j'suis stupide...mais t'as l'air de t'y connaitre en gens stupides lol t'as trouvé pile la connerie que j'avais faite :$ ou alors c a force d'm'aider lol
merci en tous cas ça marche maintenant!

"Un seul Être vous manque, et tout est dépeuplé..."
Commenter la réponse de sphaxslayer
MorpionMx 3489 Messages postés lundi 16 octobre 2000Date d'inscription 30 octobre 2008 Dernière intervention - 22 avril 2005 à 15:23
0
Merci
J'voyais que ca comme raison

a+


Mx
Commenter la réponse de MorpionMx

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.