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 :

TextBox.text ="" quand TextBox.Visible = False


Sujet :

VB.NET

  1. #1
    Membre éclairé
    Inscrit en
    Juillet 2013
    Messages
    777
    Détails du profil
    Informations forums :
    Inscription : Juillet 2013
    Messages : 777
    Par défaut TextBox.text ="" quand TextBox.Visible = False
    Bonjour,

    Tout est dans le titre !

    J'ai un textbox masqué qui contient le compteur (clé primaire) de ma Bdd.
    Je veux en récupérer le contenu pour un traitement SQL.
    J'ai remarqué que TextBox.Text = "" si TextBox.Visible=False ce qui m'empêche de récupérer la valeur

    Je ne trouve pas la solution (autre que régler la bordure et la police de même couleur que le fond)

  2. #2
    Membre Expert
    Avatar de wallace1
    Homme Profil pro
    Administrateur systèmes
    Inscrit en
    Octobre 2008
    Messages
    1 966
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Administrateur systèmes
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 966
    Billets dans le blog
    7
    Par défaut
    Bonsoir noftal,

    Le fait que ta Textbox soit paramétré en "Visible=False" ne rends pas sa propriété ".Text" vide ....c'est totalement faux !
    Il y a certainement un autre problème quelque part ailleurs !

    A+

  3. #3
    Modérateur
    Avatar de Sankasssss
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2006
    Messages
    1 842
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 842
    Par défaut
    je confirme ce qu'a dit wallace1

  4. #4
    Membre averti
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Octobre 2011
    Messages : 40
    Par défaut
    Pour confirmation remet la propriété à True et tu sera convaicu

  5. #5
    Membre Expert


    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2006
    Messages
    970
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Belgique

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

    Informations forums :
    Inscription : Avril 2006
    Messages : 970
    Par défaut
    D'accord avec nos deux amis. Aurais tu des exemples de code à nous soumettre ?
    Articles sur les technologies .NET

    Une réponse vous a aidé ? utilisez le bouton

    Votre problème est résolu ? utilisez le bouton

  6. #6
    Membre éclairé
    Inscrit en
    Juillet 2013
    Messages
    777
    Détails du profil
    Informations forums :
    Inscription : Juillet 2013
    Messages : 777
    Par défaut
    Pour confirmation remet la propriété à True et tu sera convaicu
    Justement, c'est comme ça que je m'en suis aperçu.

    Cela dit, vos réponses me rasssurent. Ce comportement me semblait bien curieux.
    Maintenant, reste à trouver d'où vient l'erreur de code. Merci de votre aide.

    Le code étant assez compliqué, à coup d'espions et de points d'arrêt, j'ai trouvé l'endroit où l'espion TextBox1.text change de valeur. Cela se situe assez tôt dans le code de l'appli, au niveau de l'initialisation

    Dans cette appli, TextBox1 est un champ rempli par un databinding en fonction de la ligne sélectionnée d'un DataGridView (DTG)

    L'ordre d'exécution des instructions est le suivant :

    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
    21
    22
    23
    24
    25
    26
    27
    28
    29
     
    ' déclare le CurrencyManager qui va servir de compteur d'enregistrements pour le champ TextBox ... et d'autres
    Private WithEvents CurMa_VC As CurrencyManager
    ...
     
    ' initialise le BindingNavigator permettant de naviguer entre les enregistrements dont TextBox fait partie. 
    'BN_VC = binding navigator
    'bs_VC = bindingsource dont le datasource, défini dans le designer est une datatable contenant Compteur
    Me.BN_VC.BindingSource = Me.bs_VC
    CurMa_VC= CType(Me.BindingContext(bs_VC), CurrencyManager)
    ...
     
    ' stocke le champ commun à la table sous jacente du DTG et à VC (relation de 1 à plusieurs)
    RéférenceActive = Me.DG_CLC.Rows(index).Cells(0).Value
     
    ' filtre le bs_VC sur la valeur de ce champ
    bs_VC.Filter = "N_ref = " & RéférenceActive
    ' se positionne sur le premier enregistrement de VC ainsi filtré
     CurMa_VinsConsommés.Position = 0
    ...
     
    TextBox.DataBindings.Clear() 'cette fonction n'a pas d'intérêt à l'initialisation mais uniquement après modification du dataset en cours d'appli
    ' définit la source de textbox
    Me.TextBox.DataBindings.Add("text", bs_VC, "Compteur")
    ...
    'ta_VC : table adapter défini sur la table VC (dans le designer, XSD)
    'ds: dataset défini dans le designer représentatif de l'ensemble de la BdD
    ' dt_VC : datatable définie dans le designer correspondant à la table VC 
    Me.ta_VC.Fill(Me.ds.dt_VC))
    J'ai mis des ... pour signifier que d'autres instructions s'intercalent mais a priori sans rapport avec TexTBox ou sa source de données

    voici ce que j'apprends en mode débug :
    - Au départ, TextBox1.text="".
    - si TextBox1.Visible = False (dans les propriétés du champ dans le designer), alors TextBox1.text="" pendant tout le déroulement du code ci-dessus
    - si TextBox1.Visible = True alors TextBox1.text change de valeur pour prendre la valeur attendue après exécution de la ligne 29 du code.

    J'espère que ces infos vont vous permettre d'y voir plus clair. N'hésitez pas à me poser des questions s'il vous en manque.

  7. #7
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 198
    Par défaut
    la réponse semble être là
    http://stackoverflow.com/questions/9...isible-control

    en résumé le databinding ne fonctionne que si le controle est visible
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  8. #8
    Membre Expert


    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2006
    Messages
    970
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Belgique

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

    Informations forums :
    Inscription : Avril 2006
    Messages : 970
    Par défaut
    Ce que j'étais en train de me dire, je pense déjà avoir eu ce problème il y a longtemps. Maintenant je ne sais pas si c'est logique ou non ...
    Articles sur les technologies .NET

    Une réponse vous a aidé ? utilisez le bouton

    Votre problème est résolu ? utilisez le bouton

  9. #9
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 198
    Par défaut
    ca ne me parrait pas totalement illogique
    le databinding sert à faire de l'affichage, et qui dit databinding dit objet ayant les données

    donc quand on a des objets de données, aller lire des infos dans un control n'est pas cohérent

    et eux ca gagne surement un peu sur les performances de ne pas faire des choses pour rien (le controle n'est pas affiché, pourquoi lui setter ses valeurs)
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  10. #10
    Membre actif
    Homme Profil pro
    Chargé de commercialisation
    Inscrit en
    Août 2013
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Chargé de commercialisation
    Secteur : Bâtiment

    Informations forums :
    Inscription : Août 2013
    Messages : 46
    Par défaut
    Bonjour,

    ce que tu peux faire, c'est mettre en visible le temps que le databinding inscrive la valeur, puis le passer en false tout de suite après.

    est ce possible de créer une variable qui fera le transfert dans le textbox non visible ?

    ce que j'explorerais comme pistes ^^

  11. #11
    Membre éclairé
    Inscrit en
    Juillet 2013
    Messages
    777
    Détails du profil
    Informations forums :
    Inscription : Juillet 2013
    Messages : 777
    Par défaut
    Merci pour ces infos. Je n'aurais jamais imaginé une telle subtilité.
    L'affichage masqué de mon "compteur" me simplifiait la tâche pour mes requêtes.
    Je pense que je vais d'abord explorer la possibilité de récupérer la valeur de compteur en faisant une requête à partir des autres champs de l'enregistrement de VC qui, eux, sont bien visibles et utiles.
    Sinon, il y a bien la méthode consistant à rendre artificiellement invisible mon TextBox (en fondant bordure et font dans la masse) mais je ne trouve pas ça très bô

  12. #12
    Membre Expert


    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2006
    Messages
    970
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Belgique

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

    Informations forums :
    Inscription : Avril 2006
    Messages : 970
    Par défaut
    A ce moment la il y a le système de placer ton contrôle sous un autre qui doit être visible. Pas propre non plus mais cela à le mérite de "corriger" ton soucis
    Articles sur les technologies .NET

    Une réponse vous a aidé ? utilisez le bouton

    Votre problème est résolu ? utilisez le bouton

  13. #13
    Membre Expert


    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2006
    Messages
    970
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Belgique

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

    Informations forums :
    Inscription : Avril 2006
    Messages : 970
    Par défaut
    ca ne me parrait pas totalement illogique
    le databinding sert à faire de l'affichage, et qui dit databinding dit objet ayant les données

    donc quand on a des objets de données, aller lire des infos dans un control n'est pas cohérent

    et eux ca gagne surement un peu sur les performances de ne pas faire des choses pour rien (le controle n'est pas affiché, pourquoi lui setter ses valeurs)
    Raisonnement tout à fait cohérent ... Mais il est vrai que la chose est très subtile si on ne le sait pas.
    Articles sur les technologies .NET

    Une réponse vous a aidé ? utilisez le bouton

    Votre problème est résolu ? utilisez le bouton

  14. #14
    Membre éclairé
    Inscrit en
    Juillet 2013
    Messages
    777
    Détails du profil
    Informations forums :
    Inscription : Juillet 2013
    Messages : 777
    Par défaut
    bs_VC contient donc un certain nombre d'enregistrement issus d'un filtre sur une table.
    La question désormais est : comment récupérer le contenu du champ Compteur de l'enregistrement courant (que l'on peut situer grâce à bs_VC.position) ?
    Je cherche...

  15. #15
    Membre éclairé
    Inscrit en
    Juillet 2013
    Messages
    777
    Détails du profil
    Informations forums :
    Inscription : Juillet 2013
    Messages : 777
    Par défaut
    Après un peu de tatonnement, voici la solution :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MonCompteur = Me.ds.dt_dt_VC.Select("N_ref = " & RéférenceActive).ElementAt(bs_VC.Position).Item(0)
    Le champ compteur étant la première colonne (donc index 0 sur la ligne)

    Je peux ainsi m'affranchir d'un TextBox pour stocker la valeur.

    Merci à tous pour vos lumières

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [XL-2007] Boucle Textbox. Visible = false
    Par Philippe_shelby dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 30/01/2015, 14h18
  2. [C#] mettre en majuscule le texte d'un controle textbox
    Par grome dans le forum Windows Forms
    Réponses: 4
    Dernier message: 09/10/2011, 00h12
  3. Valeur d'un champ TextBox avec propriété visible = false
    Par mohamed301084 dans le forum VB.NET
    Réponses: 4
    Dernier message: 26/04/2010, 16h02
  4. [AC-2007] erreur quand j'utilise TextBox.Text
    Par nabilous87 dans le forum IHM
    Réponses: 14
    Dernier message: 04/09/2009, 15h02
  5. [C#] TextBox.text to int
    Par leycho dans le forum Windows Forms
    Réponses: 2
    Dernier message: 23/04/2006, 15h33

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