TextBox en Label

Résolu
BarthOlivier Messages postés 132 Date d'inscription mercredi 6 mars 2002 Statut Membre Dernière intervention 27 novembre 2012 - 8 nov. 2012 à 17:32
BarthOlivier Messages postés 132 Date d'inscription mercredi 6 mars 2002 Statut Membre Dernière intervention 27 novembre 2012 - 14 nov. 2012 à 10:53
Bonjour,

Je viens de regarder sur les forums (peut-être mal) et je n'arrive pas à trouver de solution à mon problème.
Je tourne en rond depuis 4H et ça me semble infaisable. Un peu de fainéantise ? <maybe>

Dans l'une de mes applications, je dois remplacer tous les contrôles TextBox par des contrôles Labels.
Ca semble fonctionner en apparence. Mais impossible de modifier le text de ces "nouveau contrôles" depuis
des fonctions initialement compilées pour écrire dans les TextBox ...

voici ma fonction de remplacement :

        private void SetTypeSaisie(bool Tablette)
        {
            int X = 0;
            if (Tablette)
            {
                IEnumerable<Control> ListControl = gData.ControlsAvecRecursivite(this);
                foreach (Control ctrl in ListControl)
                {
                    if (ctrl.BackColor SystemColors.Window) ctrl.BackColor Color.White;

                    if (ctrl is TextBox)
                    {
                        Label NewCtr = new Label();
                        Control Parent = ctrl.Parent;
                        IntPtr ctrlHandle = ctrl.Handle;

                        string strName = ctrl.Name;
                        if (!string.IsNullOrEmpty(strName))
                        {
                            ctrl.Name = strName + "_" + X++;
                            NewCtr.Name = strName;
                            NewCtr.AutoSize = false;
                            NewCtr.Size = ctrl.Size;
                            NewCtr.Left = ctrl.Left;
                            NewCtr.Top = ctrl.Top;
                            NewCtr.Text = ctrl.Text;
                            NewCtr.BackColor = ctrl.BackColor;
                            NewCtr.BorderStyle = BorderStyle.Fixed3D;

                            NewCtr.Font = ctrl.Font;
                            NewCtr.ForeColor = ctrl.ForeColor;
                            if ((ctrl as TextBox).TextAlign == HorizontalAlignment.Center)
                                NewCtr.TextAlign = ContentAlignment.MiddleCenter;
                            else if ((ctrl as TextBox).TextAlign == HorizontalAlignment.Left)
                                NewCtr.TextAlign = ContentAlignment.MiddleLeft;
                            else if ((ctrl as TextBox).TextAlign == HorizontalAlignment.Right)
                                NewCtr.TextAlign = ContentAlignment.MiddleRight;

                            Parent.Controls.Add(NewCtr);
                            Parent.Controls.Remove(ctrl);
                            NewCtr.Click += new EventHandler(Control_Click);
                            NewCtr.BringToFront();
                        }
                    }
                    else if (ctrl is ComboBox)
                        (ctrl as ComboBox).DropDownStyle = ComboBoxStyle.DropDownList;
                }
            }
        }


Manifestement quand j'essaye d'ecrire dans "txtTEST1" remplacé avec un Label et supprimé,
le label n'est pas modifié et garde la valeur initiale recupérée lors du remplacement.

Hypothese (a la con surement)

Le CLR compile l'ensemble en affectant une adresse spécifique,en mémoire , à chaque contrôle <TextBox> .
Le nouveau contrôle créé <Label> possède lui une autre adresse. Le fait de supprimer le controle <TextBox>
ne doit pas suffire à effacer l'adresse. Peut-être que le GC ne fait pas son boulot, ou n'as pas encore eu le
temps de le faire, ou n'est pas prévu pour ca, ce qui expliquerai que je puisse écrire dans un contrôle
supprimé (et récupérer la valeur en mode debug)

Question :

QuoiCommenntQu'onPeutFAIRE pour que les adresses soient les mêmes afin que mes Labels puissent êtres modifiées.

Je tourne un peu en rond donc j'abuse de votre patience et de vos compétences pour m'aider à résoudre
ce problème.

MERCI D'AVANCE A TOUS

MisterMok

4 réponses

dodo7263 Messages postés 614 Date d'inscription mercredi 10 septembre 2008 Statut Membre Dernière intervention 9 février 2017 6
9 nov. 2012 à 08:54
Salut,

Je ne suis pas sur que tu puisse faire un cast d'un objet textbox en objet label. Si je devais faire cette manip, j'aurais fait comme ça (mais pas tester) :

1) Changer la propriété readonly du textbox à TRUE
2) Changer la couleur de fond du textbox à transparent
3) Changer le contour du textbox à "none"

C'est pas très joli dans le sens ou tu donnes l'apparence d'un label à ton textbox.

En espérant que cela t'aide un peu

@+

SD
1
Rejoignez-nous