none
Gestion des contrôles d'un formulaire RRS feed

  • Question

  •  

    Bonjour,

    J’ai écrit la méthode ci-dessous, qui ne fonctionne pas.

    sControl : contient le nom de tous les contrôles d’un formulaire.

    sReadOnly : Vaut ‘true’ ou ‘false’ pour le contrôle

    sType : me donne le type du Contrôle : cmb = combo, tb = textbox, cb = CheckBox, mtb = maskedTextbox

    sDefault = Valeur par défault à l’initialisation du formulaire

    Ces informations sont initialement stockées dans un XML qui est lu à l’ouverture du formulaire et _myControl, _readOnly, _type et _default sont donc bien renseignés avant l’appel de la méthode clearControls.

    La méthode : Ce que je voudrais faire, c’est à partir du nom d’un contrôle, pouvoir l’initialiser avec une valeur par défaut et plus dès que la méthode fonctionnera.

    public static void clearControls(string _myControl, string _readOnly, string _type, string _default)

    {

        string[] sControl   = _myControl.Split(';');

        string[] sReadOnly  = _readOnly.Split(';');

        string[] sType      = _type.Split(';');

        string[] sDefault   = _default.Split(';');

        Control myControl;

        int i=0;

        foreach (string s in sType)

        {

            myControl = new Control();

            myControl.Name = sControl[i];

            switch (s)

            {

                case "cmb":

                    if (!string.IsNullOrEmpty(sDefault[i])) ((ComboBox)myControl).SelectedIndex = int.Parse(sDefault[i]); else ((ComboBox)myControl).SelectedIndex = 0;

                    break;

                case "tb":

                    if (!string.IsNullOrEmpty(sDefault[i])) ((TextBox)myControl).Text = sDefault[i]; else ((TextBox)myControl).Clear();

                    break;

                case "cb":

                    if (!string.IsNullOrEmpty(sDefault[i])) ((CheckBox)myControl).Checked = bool.Parse(sDefault[i]); else ((CheckBox)myControl).Checked = false;

                    break;

                case "mtb":

                    if (!string.IsNullOrEmpty(sDefault[i])) ((MaskedTextBox)myControl).Text = sDefault[i]; else ((MaskedTextBox)myControl).Clear();

                    break;

                case "sel":

                    break;

            }

            i++;

        }

    }

     

    Merci pour votre aide.


    Jean PERIGNY, Développeur jperigny@hotmail.fr
    dimanche 15 janvier 2012 12:56

Réponses

  • Bonjour,

    Votre code semble correcte, il manque juste l'ajout d'une contrôle sur votre formulaire (ou dans un panel) :

    this.Controls.Add(myControl);
    


    ou :

    monForm.Controls.Add(myControl)
    


    Dans le cas ou l'instance de votre fenêtre se trouve dans myControl.

    Cordialement


    Gilles TOURREAU - MVP C#
    Architecte .NET/Consultant/Formateur chez Winwise
    Blog : http://gilles.tourreau.fr
    - MCPD : Enterprise Developper / Windows Developper 3.5 / ASP .NET 3.5
    - MCITP : SQL Server 2008 Developper
    - MCTS : ADO .NET 3.5 / SQL Server 2008 Developper / Windows Forms 3.5 / ASP .NET 3.5
    • Proposé comme réponse Ciprian Duduiala lundi 16 janvier 2012 09:07
    • Marqué comme réponse jperigny lundi 16 janvier 2012 19:16
    dimanche 15 janvier 2012 23:37
    Modérateur

Toutes les réponses

  • Bonjour,

    Votre code semble correcte, il manque juste l'ajout d'une contrôle sur votre formulaire (ou dans un panel) :

    this.Controls.Add(myControl);
    


    ou :

    monForm.Controls.Add(myControl)
    


    Dans le cas ou l'instance de votre fenêtre se trouve dans myControl.

    Cordialement


    Gilles TOURREAU - MVP C#
    Architecte .NET/Consultant/Formateur chez Winwise
    Blog : http://gilles.tourreau.fr
    - MCPD : Enterprise Developper / Windows Developper 3.5 / ASP .NET 3.5
    - MCITP : SQL Server 2008 Developper
    - MCTS : ADO .NET 3.5 / SQL Server 2008 Developper / Windows Forms 3.5 / ASP .NET 3.5
    • Proposé comme réponse Ciprian Duduiala lundi 16 janvier 2012 09:07
    • Marqué comme réponse jperigny lundi 16 janvier 2012 19:16
    dimanche 15 janvier 2012 23:37
    Modérateur
  • Bonjour,

     

    J’ai écrit la méthode ci-dessous, qui ne fonctionne pas

    Son non fonctionnement se manifeste par quoi ? Une exception ? (laquelle ?) ou elle ne fait pas ce que vous attendez d'elle ?

    El lisant votre code rapidement, je n'arrive pas à voir comment vos caste peuvent être correcte car votre variable mycontrol est initialisé avec une instance de type Control que vous caster en suite en différent types (ComboBox, TextBox, ...).

    A mon avis ces opération de casting ne peuvent que échouer. Il faut modifier votre bloque switch de la façon suivante : 

                    switch (s)
                    {
                        case "cmb":
                            myControl = new ComboBox();
                            if (!string.IsNullOrEmpty(sDefault[i])) ((ComboBox)myControl).SelectedIndex = int.Parse(sDefault[i]); else ((ComboBox)myControl).SelectedIndex = 0;
                            break;
                        case "tb":
                            myControl = new TextBox();
                            if (!string.IsNullOrEmpty(sDefault[i])) ((TextBox)myControl).Text = sDefault[i]; else ((TextBox)myControl).Clear();
                            break;
                        case "cb":
                            myControl = new CheckBox();
                            if (!string.IsNullOrEmpty(sDefault[i])) ((CheckBox)myControl).Checked = bool.Parse(sDefault[i]); else ((CheckBox)myControl).Checked = false;
                            break;
                        case "mtb":
                            myControl = new MaskedTextBox();
                            if (!string.IsNullOrEmpty(sDefault[i])) ((MaskedTextBox)myControl).Text = sDefault[i]; else ((MaskedTextBox)myControl).Clear();
                            break;
                        case "sel":
                            break;
                    }
    

     

    Cordialement.

    lundi 16 janvier 2012 08:58
    Auteur de réponse