Meilleur auteur de réponses
Où dois-je écrire le code ?

Question
-
Pardon pour le niveau très basique de la question. Venant de VB 6, je nage complètement, et après avoir téléchargé une demie tonne d'aide, mon système me renvoit toujours sur l'aide en ligne...
note : dsvb10 = disparu sur Visual basic express 2010
Ma (première) question de base est celle-ci : mon application VB 6.0 comportait une première page dans laquelle figuraient la couleur (backcolor) et le style de remplissage (fillstyle) ainsi que plusieurs boites de texte (Label ou textbox) comportant des informations et repérées, elles aussi par leur index (dsvb10). L'ensemble figurait les lames de différentes matières juxtaposées figurant des épaisseurs diverses de matières. La température de l'air à gauche de la première lame est connue, et la température à droite est également connue (ou recherchée).
L'application calculait par itérations s
cessives la température à la jonction de chaque lame.
Une deuxième page donnait, à l'échelle, une représentation graphique du système et des températures.
L'application servait à calculer la résistance thermique des parois d'une construction, et les épaisseurs d'isolants à prévoir.
Les couleurs et les styles servaient à caractériser les matériaux.
Exemple de la première page :
Exemple de la deuxième page :
J'ai commencé par essayer de transférer les données de base (chaque lame) dans une table Access, ce qui se faisait dans l'application VB6. Après une semaine de laborieux efforts, j'ai à peu près réussi, sans toutefois comprendrte exactement ce que je faisais) à avoir un lien entre une table Access et une série (théorique) de lames.
J'ai surtout constaté que VB express consistait à générer une quantité incroyable de code au moyen de systèmes non maitrisables (par moi) mais qui étaient censées accroitre ma productivité (tu parles...) en m'évitant l'écriture de ce fameux code.
Deuxième difficulté (cette fois, insurmontable pour moi) : je voudrais retrouver mes lames avec leurs caractéristiques. Je comprends (peut-être mal) que la seule façon de retrouver ces index bien pratiques était de créer un tableau de lames que je définirais d'abord en créant une classe "lame" pourvue de toutes les caractéristiques connues ou non y compris les contrôles (texte). En effet, je comprends qu'une collection ne serait pas utile dans la mesure où je serais obligé de créer chacune des différentes lames avec un leur propre nom au lieu de le faire en utilisant un index variant de 1 à [nombre de lames]. Et puis, je comprends qu'il existe différentes sortes de collections et je n'ai pas réussi à comprendre quel type de collection je devais choisir.
Donc, en supposant que je choisis la table TableLame(20), après avoir déclaré une nouvelle classe 'Lame' que j'ai munie de toutes ses propriétés :
Public Class Lame Private Forme As Rectangle Private Nature As Label Private Epaisseur As Label Private Lambda As Label Private EpsilonGauche As Label Private EpsilonDroite As Label Private Peau As CheckBox Private NaturePeau As Label Private EpaisseurPeau As Label Private LambdaPeau As Label Private EpsiloninternePeau As Label Private EpsilonExternePeau As Label End Class
Où est (sont) l'erreur(les erreurs) et où donc faut-il que je déclare (Dim ?) cette table ?
J'ai essayé un peu partout : au mieux, je reçois une erreur : " 'Lame n'est pas un membre de 'WindowsApplication1.Lame' "
- Modifié Pierre Allemand jeudi 8 mars 2012 22:24
Réponses
-
Bonjour,
Pour la question initiale j'ai l'impression que vous avez déclaré votre classe dans une autre classe (le formulaire ?). Elle s'appelerait donc par exemple WindowsApplication1.AutreClasse.Lame plutôt que WindowsApplication1.Lame. Ctrl-Alt-J vous permet d'explorer la structure de votre application et de retrouver où se trouve votre classe Lame dans la hiérarchie des noms. Voir http://msdn.microsoft.com/fr-fr/library/zt9tafza(v=vs.80).aspx (espaces de noms).
Les membres que vous avez déclarés sont privés, donc comme en VB6 elles ne sont pas accessibles de l'extérieur de votre classe (changer private en public).
Pour l'instant il me semble que vous voulez créer un tableau qui garde trace des contrôles que vous ajoutez sur votre formulaire. Comme suggéré par Ciprian un contrôle utilisateur pourrait vous permettre de gérer chaque aspect de votre application au niveau de détail qui vous intéresse. Par exemple :
- ajouter un "UserControl" à votre projet et placez y qq contrôles
- ajouter un FlowLayoutPanel sur votre formulaire
- dans le Form_Load :For i = 1 To 4 FlowLayoutPanel1.Controls.Add(New UserControl1) Next
Et vous allez pouvoir générer qq chose comme :
Ultérieurement chaque UserControl pourrait être créé en fonction de la liste de vos données et c'est le UserControl qui saura quoi afficher dans quel contrôle. Votre formulaire ne s'occupe que de la coordination générale. Le UserControl s'occupe de gérer le détail de la façon dont vos données s'affichent. En séparant ainsi les différents aspects de votre application, vous devriez avoir qq chose de plus facile à faire évoluer (j'imagine que dans votre appli VB6 vous calculiez sans doute vous même les coordonnées des contrôles à afficher ?)...
Please always mark whatever response solved your issue so that the thread is properly marked as "Answered".
- Modifié Patrice ScribeMVP, Moderator samedi 10 mars 2012 15:24
- Proposé comme réponse scalpa lundi 12 mars 2012 12:13
- Marqué comme réponse Ciprian Duduiala mardi 13 mars 2012 06:55
Toutes les réponses
-
Bonjour,
Pouvez-vous corriger les liens de vos captures d'écran ? (Le lien des images semble être incorrect).
Cordialement
Gilles TOURREAU - MVP C#
Architecte logiciel/Consultant/Formateur Freelance
Blog : http://gilles.tourreau.fr
- MCPD : Enterprise Developper / Windows Developper 3.5 / ASP .NET 3.5/4.0
- MCITP : SQL Server 2008 Developper
- MCTS : ADO .NET 3.5 / SQL Server 2008 Developper / Windows Forms 3.5 / ASP .NET 3.5/4.0 -
Bonjour,
Ce n’est pas très clair qu’est-ce que vous voulez dire par « retrouver mes lames avec leurs caractéristiques ». Dans votre classe Lame vous avez plusieurs contrôles comme membres. Un control est spécifique à l’interface utilisateur, donc si vous voulez avoir une liste de contrôles pour vos Lames il faut définir un control composite (on va l’appeler LameUI, par exemple) qui contiendra toutes les contrôles nécessaires pour afficher les informations liées à une lame.
Puis il faut définir une classe Lame pour gérer lescaractéristiques de chaque lame : les types de ses membres doivent être String
pour les infos affichées dans un control Label ou Boolean pour un control CheckBox,par exemple.Puis, vous allez obtenir une liste des objets Lame à partir de votre base Access et en utilisant cette liste vous modifierezl’interface visuelle en ajoutant des contrôles LameUI. Chaque control serainitialise avec les données d’un objet Lame.
Je ne sais pas si mes explications sont claires,
mais j’ai essayé vous expliquer un peu comment gérer votre application.Bonne journée,
Cipri
Ciprian DUDUIALA, MSFT
•Nous vous prions de considérer que dans le cadre de ce forum on n’offre pas de support technique et aucune garantie de la part de Microsoft ne peut être offerte.
- Modifié Ciprian Duduiala vendredi 9 mars 2012 07:30
-
-
J'ai écrit (au hasard) le code que vous me proposez dans la sub "form1_load" (car je ne sais toujours pas où écrire le code ce qui était l'objet principal de ma question). Mon objectif est ensuite d'attribuer des valeurs aux propriétés de l'objet "TabLames(0)
Malheureusement, lorsque j'essaie d'attribuer des valeurs aux propriétés de "MaLame" ou de "TabLame(0)", je n'obtiens, en popup, après avoir tapé un point à la suite de "TabLames(0)" aucune des propriétés que j'ai attribuées à la classe "Lame", ni d'ailleurs aucune propriété mais uniquement une liste d'évènements, ce qui indique qu'il y a une erreur quelque part, et que l'objet "TabLame(0) n'est pas susceptible d'avoir des propriétés alors que les objets de la table ("TabLame() ont été déclarés comme faisant partie de la classe "Lame" qui possède un certain nombre de propriétés comme déclaré. (???). Où est l'erreur ?
Pierre Allemand
-
"Dans votre classe Lame vous avez plusieurs contrôles comme membres".
Il n'y a pas que des contrôles. Il y a aussi un objet "rectangle" qui possède un certain nombre de propriétés.
"il faut définir une classe Lame pour gérer lescaractéristiques de chaque lame : les types de ses membres doivent être String".
Il n'y a pas que des caractéristiques du type String dans la classe Lame que j'ai définie (voir ma première question).
"Puis, vous allez obtenir une liste des objets Lame à partir de votre base Access et en utilisant cette liste vous modifierezl’interface visuelle en ajoutant des contrôles LameUI. Chaque control serainitialise avec les données d’un objet Lame.
Je ne sais pas si mes explications sont claires".
Pardon, mais je ne comprends pas bien cette phrase : Ma base Access peut effectivement me donner le détail des propriétés de chaque lame, et je peux, je suppose, lier chaque contrôle correspondant à une lame à sa valeur dans la colonne correspondante de la base Access. Je n'en suis malheureusement pas encore là. Je cherche d'abord à créer des objets de la classe "lame" comportant justement les contrôles dont vous parlez, et je n'y arrive pas car je ne sais tout simplement pas où écrire le code correspondant (et quel est ce code). La base Access doit d'ailleurs être d'abord alimentée avec les caractéristiques de chaque objet "Lame" que je veux créer. Ensuite, elle doit recréer sur demande les lames définies au préalable.
Pierre Allemand
-
Bonjour,
Pour la question initiale j'ai l'impression que vous avez déclaré votre classe dans une autre classe (le formulaire ?). Elle s'appelerait donc par exemple WindowsApplication1.AutreClasse.Lame plutôt que WindowsApplication1.Lame. Ctrl-Alt-J vous permet d'explorer la structure de votre application et de retrouver où se trouve votre classe Lame dans la hiérarchie des noms. Voir http://msdn.microsoft.com/fr-fr/library/zt9tafza(v=vs.80).aspx (espaces de noms).
Les membres que vous avez déclarés sont privés, donc comme en VB6 elles ne sont pas accessibles de l'extérieur de votre classe (changer private en public).
Pour l'instant il me semble que vous voulez créer un tableau qui garde trace des contrôles que vous ajoutez sur votre formulaire. Comme suggéré par Ciprian un contrôle utilisateur pourrait vous permettre de gérer chaque aspect de votre application au niveau de détail qui vous intéresse. Par exemple :
- ajouter un "UserControl" à votre projet et placez y qq contrôles
- ajouter un FlowLayoutPanel sur votre formulaire
- dans le Form_Load :For i = 1 To 4 FlowLayoutPanel1.Controls.Add(New UserControl1) Next
Et vous allez pouvoir générer qq chose comme :
Ultérieurement chaque UserControl pourrait être créé en fonction de la liste de vos données et c'est le UserControl qui saura quoi afficher dans quel contrôle. Votre formulaire ne s'occupe que de la coordination générale. Le UserControl s'occupe de gérer le détail de la façon dont vos données s'affichent. En séparant ainsi les différents aspects de votre application, vous devriez avoir qq chose de plus facile à faire évoluer (j'imagine que dans votre appli VB6 vous calculiez sans doute vous même les coordonnées des contrôles à afficher ?)...
Please always mark whatever response solved your issue so that the thread is properly marked as "Answered".
- Modifié Patrice ScribeMVP, Moderator samedi 10 mars 2012 15:24
- Proposé comme réponse scalpa lundi 12 mars 2012 12:13
- Marqué comme réponse Ciprian Duduiala mardi 13 mars 2012 06:55