locked
Comment feriez-vous ça ? RRS feed

  • Question

  •  

    Bonjour

     

    Dans une fenêtre de mon application, j'ai une ComboBox et un TreeView.

    Le TreeView doit rafraîchir ses données dés que l'élément sélectionné dans la Combo change.

    En fait, le TreeView est encapsulé dans un UserControl qui expose pour l'exemple une propriété ComboBoxSelectedID

     

    public partial class MyUserControl : UserControl 
    {
            public MyUserControl ()
            {
                InitializeComponent();
            }
    
            public int ComboBoxSelectedID { get; set; }
    	
            public void LoadTreeView() {
                    ... 
                    DataManager.GetDatas(ComboBoxSelectedID )
                    ...
            }
    
            ...
    }
    

     

     

     Dans la fenêtre, lorsque la combo change, j'ai le gestionnaire d'évenement suivant :

    private void MyComboBox_SelectedIndexChanged(object sender, EventArgs e)
    {
    	int comboBoxSelectedID= (int)MyComboBox.SelectedValue;
    	SyncUserControl(comboBoxSelectedID);
    }
    
    
    private void SyncUserControl(int comboBoxSelectedID)
    {
    	this.MyUserControl1.ComboBoxSelectedID = comboBoxSelectedID;
    	this.MyUserControl1.LoadTreeView();
    }
    

     

    Tout ceci fonctionne très bien, mais je pense qu'il est possible de faire bien mieux, en se basant notamment sur les événements.

    Mais je trouve le concept un peu compliqué et surtout, peu famillier de Winforms, je ne sais pas vraiment comment faire ça dans les règles de l'art.

    Comment feriez-vous ça ?

     

    D'avance merci

     

    Damien

    mardi 13 avril 2010 17:30

Réponses

  • Bonjour,

    ta solution semble tout à fait bien. Sans utiliser d'événement supplémentaire et pour enlever quelque ligne tu pourrais déclencher la mise à jour du userControl dès que sa propriété ComboBoxSelectedId est mise à jour :

     private int _comboBoxSelectedID = 0;
      public int ComboBoxSelectedID
      {
       get
       {
        return this._comboBoxSelectedID;
       }
       set
       {
        this._comboBoxSelectedID = value;
        this.DataManager.GetDatas(ComboBoxSelectedID);
       }
      }

    et dans ce cas il suffit de positionner la valeur pour mettre à jour le user control

    private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
    {
       this.MyUserControl1.ComboBoxSelectedID = (int)this.MyComboBox.SelectedValue;
    }

    Il serait intéressant de déclarer des événements customs dans ton user control si il y avait besoin d'abonner des éléments de ta form a des évènements du user control mais ceci ne semble pas être le cas.

    Cordialement

     

     

    jeudi 15 avril 2010 12:40

Toutes les réponses

  • Bonjour,

    ta solution semble tout à fait bien. Sans utiliser d'événement supplémentaire et pour enlever quelque ligne tu pourrais déclencher la mise à jour du userControl dès que sa propriété ComboBoxSelectedId est mise à jour :

     private int _comboBoxSelectedID = 0;
      public int ComboBoxSelectedID
      {
       get
       {
        return this._comboBoxSelectedID;
       }
       set
       {
        this._comboBoxSelectedID = value;
        this.DataManager.GetDatas(ComboBoxSelectedID);
       }
      }

    et dans ce cas il suffit de positionner la valeur pour mettre à jour le user control

    private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
    {
       this.MyUserControl1.ComboBoxSelectedID = (int)this.MyComboBox.SelectedValue;
    }

    Il serait intéressant de déclarer des événements customs dans ton user control si il y avait besoin d'abonner des éléments de ta form a des évènements du user control mais ceci ne semble pas être le cas.

    Cordialement

     

     

    jeudi 15 avril 2010 12:40
  • Ok, et merci pour ta réponse.

    J'avais en effet depuis déplacé le chargement du treeView dans le "Setter" de la propriété.
    Par moment, il faut savoir faire simple, et ça devient de plus en plus difficile avec tous ces concepts ;-)

    Merci encore

    Damien

     

    vendredi 16 avril 2010 11:04