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

Windows Forms Discussion :

[VB.NET]Control.CreateControl qui ne marche pas


Sujet :

Windows Forms

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 19
    Points : 11
    Points
    11
    Par défaut [VB.NET]Control.CreateControl qui ne marche pas
    J’ai une TextBox, qui est dans un TabControl, est qui n’est pas visible lorsque je lance mon appli tant que l’utilisateur n’a pas cliqué sur l’onglet du TabControl. La propriété Text de ma TextBox est liée à un paramètre de application My.Settings.MonParam (DataBindings).

    Au lancement de l’application je dois récupérer la valeur de la propriété Text (je ne peux pas la récupérer directement dans My.Settings.MonParam car je ne sais pas comment récupérer My.Settings.MonParam à partir de ma TextBox)

    Le problème c’est que myTextBox.Text me renvoie une chaîne vide (ce qui n’est pas le cas lorsque ma TextBox est affichée à l’écran). J’ai l’explication mais pas la solution, la doc dit :
    Une liaison est active lorsqu'elle remplit ces conditions :
    • Toutes ses propriétés sont définies.
    • L'utilisateur n'a pas appelé ResumeBinding ou SuspendBinding sur le BindingManagerBase auquel le Binding appartient.
    • Le contrôle auquel le Binding appartient a été créé.


    En fait ma TextBox n’est pas liée (je le sais grâce à la propriété isBinding) car elle n’est pas crée (cf ci-dessus)(propriété isCreated) tant qu’elle n’est pas affichée.

    J’ai donc utilisé la méthode CreateControl avant la lecture de la propriété Text :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    myTextBox.CreateControl()
    MsgBox(myTextBox.Created)
    Mais ça ne marche pas car myTextBox.Created = False !!! Et ce à n’importe quel endroit dans mon code !

    Pourquoi ? Comment créer ma TextBox ? Comment lire son contenu lié tant qu’elle n’est pas affichée ?

    Merci d'avance.

  2. #2
    Membre habitué
    Profil pro
    Développeur .Net, Administrateur système
    Inscrit en
    Octobre 2003
    Messages
    219
    Détails du profil
    Informations personnelles :
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur .Net, Administrateur système
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2003
    Messages : 219
    Points : 135
    Points
    135
    Par défaut
    Je suis pas certains de cerner toute la problèmatique mais as tu essayé ceci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    dim txtbox as new textbox
    me.controls.Add(txtbox)
    j'ecris ca vite fait sans quoi pourquoi ne pas cacher la textbox et la faire apparaitre au moment voulu?

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 19
    Points : 11
    Points
    11
    Par défaut
    ok pour faire court la problématique c'est :

    "Comment tester le contenu d'une textBox qui n'est pas forcement affichée (et donc pas créée) une fois le form lancé (car contenu dans un onglet par exemple) ?"

    le code que tu me donne ajoute une textBox mais ne créé pas le control (ton code est celui généré par le designer d'IHM). Le control est créé lors de son affichage, fais un test avec IsCreated tu verras.

    si mon control n'est pas affiché => le control n'est pas créé => le binding ne se fait pas => mon control (si c'est une textbox) sera donc égal à chaine vide.

    je vais quand même pas faire un select(numOnglet) de tous mes onglets de mon TabControl pour qu'il affiche mes textBox !...

    Donc voilà mais CreateControl ne marche pas ! Pourquoi ?

    Je pense que le cas est suffisament basique (et visuel aussi, désolé :o) ) pour que chacun puisse le tester dans son coin :
    il suffit de mettre une TextBox dans un onglet qui ne s'affiche pas au lancement (le deuxième onglet d'un objet TabControl par exemple) de la lier à un param de l'appli (DataBindings) et de tester sa création une fois le form lancé (IsCreated).
    Vous verez que la TextBox n'est pas créée. Après vous utilisez CreateControl qui est là pour faire son taff mais qui finalement ne le fait pas !

    J'attends vos réponses !

  4. #4
    Membre expérimenté Avatar de bossun
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    1 359
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2002
    Messages : 1 359
    Points : 1 443
    Points
    1 443
    Par défaut
    le code que tu me donne ajoute une textBox mais ne créé pas le control
    c'est faux.

    ceci est suffisant pour créer un controle. pas besoin de l'afficher pour qu'il soit créé.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    dim x as TextBox = new TextBox
    tu n'as pas besoin d'avoir un textbox pour lire les paramètres qui se trouvent dans ton fichier de configuration...

    j'ai du mal à comprendre ce que tu veux exactement.... tu veux lire tes paramètes de config ou ajouter un textbox qui affiche tes parametres de config???

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 19
    Points : 11
    Points
    11
    Par défaut
    J'ai une fonction qui teste la validité des path contenus dans mes TextBox qui sont dans un TabControl. Je la lance en cliquant sur un bouton de l'IHM.

    Voici son code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
     
        Private Function TestPaths(ByRef myPanel As Panel, ByVal tabIndex As Integer) As Boolean
     
            For Each ctrl As Control In myPanel.Controls
     
                If TypeOf ctrl Is TextBox Then
     
                    Dim myTextBox As TextBox = ctrl
     
                    MsgBox(myTextBox.Created)
     
                    If Not (File.Exists(myTextBox.Text) Or Directory.Exists(myTextBox.Text)) Then
     
                        ' Traitement... return...
     
                    End If
     
                End If
            Next
        End Function
    myTextBox.Text = "" et myTextBox.Created = False

    sauf si le TextBox est affiché.

    Tout mes TextBox sont liés à des param d'application.

  6. #6
    Membre expérimenté Avatar de bossun
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    1 359
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2002
    Messages : 1 359
    Points : 1 443
    Points
    1 443
    Par défaut
    essaie remplace ça

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim myTextBox As TextBox = ctrl
    par ça.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Dim myTextBox As TextBox = new TextBox
     
    myTextBox = ctrl

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 19
    Points : 11
    Points
    11
    Par défaut
    J'ai éssayé.

    et ça ne change rien...

    et si je fais ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Dim myTextBox As TextBox = new TextBox
    myTextBox = ctrl
    MsgBox(myTextBox.Created)
    je récupère False

  8. #8
    Membre expérimenté Avatar de bossun
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    1 359
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2002
    Messages : 1 359
    Points : 1 443
    Points
    1 443
    Par défaut
    pourquoi tu teste si ton control est crée??? normalement il est créé à la création de ta form

  9. #9
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 19
    Points : 11
    Points
    11
    Par défaut
    quand je dis que ça ne marche pas ça veux dire que myTextBox.Text = ""

  10. #10
    Membre expérimenté Avatar de bossun
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    1 359
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2002
    Messages : 1 359
    Points : 1 443
    Points
    1 443
    Par défaut
    c'est à quel moment tu affecte des valeurs à ton textbox???

    il va cherche ou les données? fichier de configuration???

  11. #11
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 19
    Points : 11
    Points
    11
    Par défaut
    tous mes Texbox sont liées à des paramètres d'application :

    Je déclare mon paramètre dans les paramètres de l'application et je le lie dans les propriétés du TextBox [DataBlindings]

  12. #12
    Membre expérimenté Avatar de bossun
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    1 359
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2002
    Messages : 1 359
    Points : 1 443
    Points
    1 443
    Par défaut
    [DataBindings] c'est si tu relie aux bases de données....

    utilise ApplicationSettins pour lire tes paramètres....

  13. #13
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 19
    Points : 11
    Points
    11
    Par défaut
    non, le dataSet peut très bien être les ApplicationSettings (paramètres d'application) !

  14. #14
    Membre expérimenté Avatar de bossun
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    1 359
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2002
    Messages : 1 359
    Points : 1 443
    Points
    1 443
    Par défaut
    je comprends vraiment rien de ce que tu dis..

    une fois tu me parles de DataSet une fois tu me parles de paramètres d'application...

    peut-etre ton Dataset est-il vide???

Discussions similaires

  1. Réponses: 5
    Dernier message: 08/06/2010, 14h11
  2. Controle remplissage des champs qui ne marche pas
    Par adrien555 dans le forum Dreamweaver
    Réponses: 0
    Dernier message: 21/07/2008, 14h27
  3. [VB.NET] Un RollBack qui ne marche pas!
    Par JauB dans le forum Accès aux données
    Réponses: 1
    Dernier message: 23/03/2007, 02h07
  4. Réponses: 3
    Dernier message: 08/09/2003, 15h06
  5. Réponses: 9
    Dernier message: 07/05/2003, 12h57

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