[c#]parcourir les éléments d'une fenêtre

Bonjour à tous.

Je suis en train de me développer un squelette d’application pour mes futures créations perso et je suis bloqué sur un problème que je devine être idiot.

Je vous explique rapidement le topo, je voudrais qu’une fenêtre se traduise automatiquement à son chargement par le biais d’un fichier XML.

Pour cela j’ai créé une classe de traduction à laquelle je désire passer en référence la fenêtre pour qu’elle puisse parcourir toute la fenêtre et modifier les propriétés d’affichage (texte, bulles etc) selon les types de composants. Ceci bien entendu de façon recursive pour permettre de traduire également les éléments contenus dans des conteneurs à X niveaux possibles.

Et là je suis bloqué dès le début par deux problèmes crétins :

  • l’appel de ma méthode semble ne pas fonctionner, le compilateur me renvoie les erreurs suivantes : "La méthode surchargée correspondant le mieux à ‘[nom projet].clsTrad.CreatStruct(ref System.Windows.Forms.Form)’ possède des arguments non valides"
    et
    "Impossible de convertir de ‘[nom projet].MainForm’ en ‘ref System.Windows.Forms.Form’."
    Voici le code d’appel situé dans la fenêtre principale :

string temp; temp = oc_trad.CreatStruc(this);
et l’en-tête de fonction dans la classe de traduction :

public string CreatStruc(ref Form fenetre) { //code en cours de dév ici... }

Et le deuxième problème, c’est que je n’arrive pas à parcourir les éléments d’une fenêtre… J’aimerais remplir un tableau de structure décrite ci dessous et triée pour générer le fichier XML correspondant mais je n’y arrive pas. L’aide de SharpDevelop n’est pas top pour découvrir le framework .net…

Structure dont j’aimerais posséder le tableau :

struct descElt { public string nom; public string type; public string libelle; public string bulle; }

Vous devinerez que je suis un bon gros débutant en C# et que je tâtonne pour arriver à faire quelque chose de propre… Si vous voyez des erreurs énormes ou que vous avez un conseil à me donner, je suis ouvert à tout.

Merci !

Pour ton premier problème, il semblerait que ta classe MainForm n’hérite pas de System.Windows.Forms.Form.

Pour ton second problème, une fois que MainForm héritera de Form, tu auras accès à une propriété Controls qui te renvoie la liste des controls que possède ce formulaire… Un Control possédant lui même une propriétés Controls.

[quote name=‘Styx31’ date=’ 20 Sep 2005, 11:37’]Pour ton premier problème, il semblerait que ta classe MainForm n’hérite pas de System.Windows.Forms.Form.

Pour ton second problème, une fois que MainForm héritera de Form, tu auras accès à une propriété Controls qui te renvoie la liste des controls que possède ce formulaire… Un Control possédant lui même une propriétés Controls.
[right][post=“399315”]<{POST_SNAPBACK}>[/post][/right][/quote]
Malheureusement, si…

Témoin le code d’initialisation de la classe MainForm :

public class MainForm : System.Windows.Forms.Form { //etc

J’ai essayé de remplacer le code d’appel par celui-ci, c’est encore pire :

Là il me sort : “error CS1605: Impossible de passer ‘’ comme argument ref ou out, car il est en lecture seule”

Peut être qu’il y a un souci d’architecture de mon programme, si je ne peux pas modifier les éléments d’une fenêtre à partir d’une classe étrangère… Galère.

Ah oui, effectivement : Vires le ref (qui de toute manière n’a pas lieu d’être : Form est un type référence, donc il est passé par référence par défaut. Le ref ne sert que pour les types valeurs (int, struct, etc.)).

Pour la localisation de ton appli, fais des recherches sur la globalisation et les fichiers de ressource, ce sera beaucoup plus propre.