fmarinelli
Messages postés13Date d'inscriptionjeudi 26 janvier 2012StatutMembreDernière intervention23 mars 2012
-
22 mars 2012 à 16:56
Whismeril
Messages postés19025Date d'inscriptionmardi 11 mars 2003StatutContributeurDernière intervention19 avril 2024
-
23 mars 2012 à 20:14
Bonjour à tous ,
Je vous pose mon problème :
en naviguant sur la toile et sur le forum je ne trouve que des exemples c# console , moi j'utilise le mode winform c'est pour celà que je vous pose la question suivante : Comment Afficher un fichier Xml en application winform
pâr exemple dans un label , RichText ... ect
j'ai un programme qui marche en application console le voici :
fmarinelli
Messages postés13Date d'inscriptionjeudi 26 janvier 2012StatutMembreDernière intervention23 mars 2012 23 mars 2012 à 18:12
Oui et effectivement celà marche trés bien , s'ouvre Differente fenete d'erreur dans lequel tu avais spécifier par :
"version="1.0" encoding="utf-8"", "ça ne marche pas", "Robert score 10", "Marche pas non plus", "jEan score 22.", "Robert scure 10"};
Je commence un peu a comprendre ta fonction ( pas si facile hein ) j'ai d'ailleur vu different exemple. Si tu as le temps ou même l'envie , juste de m'expliquer en quoi pour mon utilisation celà peut me servir ?
brivement , je concois un jeu en c# winforms ( jeu de type plate forme ) et donc a la fin je demande le nom du joueur et "sauvegarde" son score .
Je sérialise le tout , et je veux donc que quand l'utilisateur veux voir le classement s'afficher ma liste de joueur. Ce qui serais bien ce serais de trier ma liste par score decendant , a ce niveau j'y travail avec la fonction suivante :
public class Joueur
{
public string Nom;
public int Score ;
}
class TriJoueur : IComparer<Joueur>
{
public int compare(Joueur a,Joueur b)
{
if (a.Score > b.Score)
return +1 ;
if (a.Score < b.Score)
return -1 ;
if (a.Score == b.Score)
return 0;
}
}
Whismeril
Messages postés19025Date d'inscriptionmardi 11 mars 2003StatutContributeurDernière intervention19 avril 2024656 23 mars 2012 à 19:47
Trois choses:
1)
Dans ta boucle au départ tu lisais ton xml ligne par ligne de façon à en ressortir les valeurs,
tu voulais voir apparaitre uniquement le prénom et les points (je différencie bien du mot score) et que la ligne "version="1.0" encoding="utf-8" soit rejetée.
L'exemple que je t'ai soumis fait ça, à toi de l'intégrer à ton code si tu le souhaites.
2)
Puisque tu as une classe joueur, que visiblement tu serialises et déserialises à chaque utilisation.
Tu dois utiliser une list<Joueur> je suppose.
Pourquoi ne pas afficher directement cette liste dans un datagridview?
Pour ça la méthode de base est d'associer le datasource du datagridview avec ta liste, ça va automatiquement te créer une colonne par propriété de ta class et une ligne par instance.
Puisque tu as géré le Icomparer, il te suffit de trier ta liste avant de la mettre en datasource. Ce n'est pas la méthode la plus personnalisable, mais c'est simple. Si tu veux renommer les colonnes, changer l'ordre etc.. il faut utiliser le binding, voir ici.
3)
public class Joueur
{
public string Nom;
public int Score ;
}
Ce codage est déconseillé en c#, il est préférable d'utiliser des propriétés, d'ailleurs pour le 2), il t'en faut.
L'intérêt est d'avoir une passerelle entre une variable interne à ta classe dont tu fais ce que tu veux (surtout pour de futures évolutions) et l'accès depuis l'extérieur qui lui reste inchangé. Ca donne ça:
class Joueur
{
private string nom;
private int score;
public string Nom
{
get { return nom; }
set { nom = value; }
}
public int Score
{
get { return score; }
set { score = value; }
}
}
Dans ton cas les variables internes n'apportent rien puisqu'il n'y a pas de méthodes, ni événements dans ta classe, tu peux alors simplifier comme ça:
class Joueur
{
public string Nom { get; set; }
public int Score { get; set; }
}
Comme ça tu gardes la porte ouverte pour l'avenir.
Petite astuce quand tu veux écrire une propriété, tu tapes prop, intellisense va te proposer prop, propa et propdp.
Si par exemple tu chois prop tapes deux fois sur tab,
public int MyProperty { get; set; }
s'écrit automatiquement et int est sélectionné, tu peux changer le type à loisir, puis tapes à nouveau sur tag c'est alors MyProperty qui est sélectionné, tu changes alors le nom.
bon sa doit pas vous impressionez mais je supose que avec mon datagridview je peux surment les ordonées mes scores du plus fort au plus faible en cliquant desus ?
C'est parfait et et mieux que se que je pouvais imaginer
En Tout cas ton aide ma été des plus précieuse sa fait plaisir d'apprendre finallement