Whismeril
Messages postés18992Date d'inscriptionmardi 11 mars 2003StatutContributeurDernière intervention29 mars 2024654 3 févr. 2018 à 15:07
J'ai fait une petite boulette dans le code que je t'ai proposé, il y a des doublons dans les régions.
Voici le code corrigé, tant que j'y étais j'ai trié par ordre alphabétique.
Dim regions As List(Of String) = Departments.Select(Function(d) d.Region).Distinct().OrderBy(Function(r) r).ToList()
Whismeril
Messages postés18992Date d'inscriptionmardi 11 mars 2003StatutContributeurDernière intervention29 mars 2024654 2 févr. 2018 à 10:36
Rlooping
Messages postés13Date d'inscriptionlundi 28 novembre 2005StatutMembreDernière intervention 2 février 2018 Modifié le 2 févr. 2018 à 10:32
Merci pour ces commentaires. Effectivement, je viens du VB6.
Je suis peut être un peu vieux pour la programmation Objet !!! :-)
Pour la Liste des Régions, elles sont en doublon dans la CheckedListBox_Region !!
Whismeril
Messages postés18992Date d'inscriptionmardi 11 mars 2003StatutContributeurDernière intervention29 mars 2024654 Modifié le 1 févr. 2018 à 18:52
Bonsoir
sur le fond, il y a du VB6 partout, pense à désactiver la référence à VisualBasic dans tout projet VB.Net
Mettre des accents, des cédilles etc... dans les nom de variables, de fichiers ou de projets est très très déconseillé.
J'ai dézippé ton projet sur un mac et tout était cassé.
Sur un windows pas configuré en français, ça se dézippe, mais Visual Studio ne sait pas compiler, etc...
sur le code tu as écrit une classe, donc un objet, et tu t'en sers comme une structure.
Le principe de l'objet est qu'il gère tout un "thème".
Dans ton cas, un DefDepartement doit savoir comme il s'affiche et la form ne servant que d'interface graphique.
Il doit aussi savoir quelle est son image, etc...
De plus, tu as stocké tes données dans une liste, et tu ne te sers pas de ces capacités de recherches pour extraire les régions.
(Soit dit en passant, il aurait pu être plus logique de faire une liste de Régions, qui contient une Liste de Départements)
Enfin, tu ne profites pas du binding.
Pour te montrer, j'ai traité l'affichage dans la classe, et j'ai fait une requête pour extraire les régions et j'ai bindé les 2 listes aux contrôles adéquats
La classe devient
Public Class DefDepartement
Property Region As String = String.Empty
Property Numero As String = String.Empty
Property Departement As String = String.Empty
''' <summary>
''' Je change le ToString par défaut, par le texte qui me convient, ça fait 3 lignes de codes en plus sans les commentaires
''' </summary>
''' <returns></returns>
Public Overrides Function ToString() As String
Return String.Format("({0}) {1}", Numero.PadLeft(2, "0"), Departement)
End Function
End Class
et le load de la form devient
Private Sub FrmDepartements_Load(sender As Object, e As EventArgs) Handles MyBase.Load
'Clear Picture of department
PictureBox_Dep.Image = Nothing
'load Xml of list of department
ModRegion.Load(Path.Combine(Application.StartupPath))
'affichages des données en 3 lignes seulement
CheckedListBox_Dep.DataSource = Departments
Dim regions As List(Of String) = Departments.Select(Function(d) d.Region).ToList()
CheckedListBox_Region.DataSource = regions
End Sub
Et je n'ai pas regardé le reste du code, mais il est évident que tu ne profites pas de la programmation objet ni des outils puissants offerts par la framework.
Ton code ressemble à s'y méprendre à du VB6.
3 févr. 2018 à 15:07
Voici le code corrigé, tant que j'y étais j'ai trié par ordre alphabétique.
2 févr. 2018 à 10:36
Et puis le concept date du début des années 60.
J’ai écrit des articles pour ceux qui passent de vb6 à vb.net
http://codes-sources.commentcamarche.net/faq/11151-pourquoi-mon-code-vb6-vba-ne-marche-pas-en-vb-net
Et plus en profondeur
http://codes-sources.commentcamarche.net/faq/11239-la-programmation-objet-appliquee-a-net-par-l-exemple-partie-1-sur-3
Modifié le 2 févr. 2018 à 10:32
Je suis peut être un peu vieux pour la programmation Objet !!! :-)
Pour la Liste des Régions, elles sont en doublon dans la CheckedListBox_Region !!
Modifié le 1 févr. 2018 à 18:52
sur le fond,
il y a du VB6 partout, pense à désactiver la référence à VisualBasic dans tout projet VB.Net
Mettre des accents, des cédilles etc... dans les nom de variables, de fichiers ou de projets est très très déconseillé.
J'ai dézippé ton projet sur un mac et tout était cassé.
Sur un windows pas configuré en français, ça se dézippe, mais Visual Studio ne sait pas compiler, etc...
sur le code
tu as écrit une classe, donc un objet, et tu t'en sers comme une structure.
Le principe de l'objet est qu'il gère tout un "thème".
Dans ton cas, un DefDepartement doit savoir comme il s'affiche et la form ne servant que d'interface graphique.
Il doit aussi savoir quelle est son image, etc...
De plus, tu as stocké tes données dans une liste, et tu ne te sers pas de ces capacités de recherches pour extraire les régions.
(Soit dit en passant, il aurait pu être plus logique de faire une liste de Régions, qui contient une Liste de Départements)
Enfin, tu ne profites pas du binding.
Pour te montrer, j'ai traité l'affichage dans la classe, et j'ai fait une requête pour extraire les régions et j'ai bindé les 2 listes aux contrôles adéquats
La classe devient
et le load de la form devient
Et je n'ai pas regardé le reste du code, mais il est évident que tu ne profites pas de la programmation objet ni des outils puissants offerts par la framework.
Ton code ressemble à s'y méprendre à du VB6.