IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VB.NET Discussion :

Regénération des objets si le form est appelé plusieurs fois


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Septembre 2012
    Messages
    166
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2012
    Messages : 166
    Par défaut Regénération des objets si le form est appelé plusieurs fois
    Bonjour,
    j'ai une form2 qui peut être appelée plusieurs fois par la form1.
    Dans le Sub (Load), j'ai le setup de plusieurs datatables.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
            TaskListAsTable.Columns.Add("Type", GetType(String))
            TaskListAsTable.Columns.Add("Name", GetType(String))
            TaskListAsTable.PrimaryKey = New DataColumn() {TaskListAsTable.Columns("Name")}
            TaskListAsTable.Columns.Add("host", GetType(String))
            TaskListAsTable.Columns.Add("port_rest", GetType(String))
    Mon soucis est que lorsque j'appele la form2 pour la seconde fois, j'ai une erreur qui me dit que les colonnes de la table existe déjà.

    Avez-vous une idée pour "killer" cette table à chaque fois que je sors de Form2.

    Merci

    Patrick

  2. #2
    Membre Expert Avatar de jopopmk
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2011
    Messages
    1 856
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2011
    Messages : 1 856
    Par défaut
    Salut,

    je vois trois possibilités :
    - dans ton load, avant d'ajouter tes colonnes, tu vides la collection (elle doit bien avoir une méthode du genre Clear),
    - dans ton load tu vérifies que tes colonnes n'existent pas déjà avant de les ajouter,
    - tu ajoutes tes colonnes dans ton constructeur, après l'appel à InitializeComponent.

  3. #3
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Septembre 2012
    Messages
    166
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2012
    Messages : 166
    Par défaut
    Bonjour jopopmk,
    Humm!!! mon problème me semble insoluble pour une solution élégante.
    Bon, je fais un peu à l'arrache mais ça marche :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
        Dim InitTable As Boolean = True
     
        Private Sub Setup_Light_Load(sender As Object, e As EventArgs) Handles MyBase.Load
            ' open du xdocument de config
            XCfgDoc = XDocument.Load(CfgFileName)
            If InitTable Then
                TaskListAsTable.Columns.Add("Type", GetType(String))
                TaskListAsTable.Columns.Add("Name", GetType(String))
                TaskListAsTable.PrimaryKey = New DataColumn() {TaskListAsTable.Columns("Name")}
                TaskListAsTable.Columns.Add("host", GetType(String))
                TaskListAsTable.Columns.Add("port_rest", GetType(String))
     
                InitTable = False
            End If
    Bon, pas très joli, mais efficace.
    Comme tu le vois, la variable InitTable passe à False lors du premier chargement, donc après les tables ne sont plus "ré-initialisées".
    Merci pour les idées.
    Patrick

  4. #4
    Membre Expert Avatar de jopopmk
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2011
    Messages
    1 856
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2011
    Messages : 1 856
    Par défaut
    De mes 3 propositions la dernière est la plus "propre", la première la plus sale. Tu as opté pour la seconde, c'est ton choix

  5. #5
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Septembre 2012
    Messages
    166
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2012
    Messages : 166
    Par défaut
    En effet, la 3eme est la plus belle.
    Mais il semble qu'il soit nécessaire d'aller "trifouiller" le fichier (.designer.vb) alors qu'il n'est pas recommandé d'y aller à la "main", juste laisser VS le modifier.
    Donc, pas forcement l'envie de déglinguer tout mon projet
    Je ferai un test sur un projet simple.
    Merci de ton aide.
    Patrick

  6. #6
    Membre Expert Avatar de jopopmk
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2011
    Messages
    1 856
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2011
    Messages : 1 856
    Par défaut
    Je sais pas bien pour VB -mais ça doit être pareil- pour C# le code du designer est encapsulé dans une fonction InitializeComponent qui est effectivement dans un fichier à part (.designer.cs). Par contre l'appel à cette fonction est fait dans le constructeur, qui lui est dans ton fichier "normal". Tu peux donc caler du code juste après cet appel sans toucher à la partie auto-générée

Discussions similaires

  1. Réponses: 5
    Dernier message: 01/03/2015, 19h02
  2. Réponses: 1
    Dernier message: 03/08/2012, 15h06
  3. Accéder à des objets d'une Form à partir d'une classe
    Par kinouseb dans le forum Windows Forms
    Réponses: 4
    Dernier message: 23/01/2007, 18h07
  4. Réponses: 3
    Dernier message: 09/01/2007, 15h27
  5. Réponses: 13
    Dernier message: 09/05/2006, 16h30

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo