2010-03-18 5 views
2

J'ai un UserControl simple contenant un ComboBox qui est vide au début. Le setter pour ce CB ajoute des éléments et le getter renvoie l'élément sélectionné. Lors de l'ajout de cette UC à un formulaire, le concepteur appelle automatiquement le getter pour le CB qui est vide. La méthode pour remplir le CB avec des éléments est appelée plus tard. Je peux penser à une ou deux façons de contourner ce problème en «déconnant» dans le code. Mais avant de commencer, j'aimerais vous demander s'il existe un moyen d'empêcher le concepteur d'appeler la méthode getter. Peut-être avec un attribut similaire à Browsable ou Bindable? thxempêche le concepteur d'appeler un getter (VS 2008, WinForms)

Répondre

1

Ce n'est pas si clair pour moi à quoi pourrait ressembler ce getter. Cependant, vous voulez vous assurer que le concepteur ne sérialise pas les propriétés qui ne devraient jamais être utilisées au moment de l'exécution. Pour ce faire, avec un attribut:

[DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] 
    [Browsable(false)] 
    public int SomeProperty { 
     //etc... 
    } 
+0

thx ... c'est ce que j'ai cherché. Ça marche. le concepteur n'appelle plus la méthode getter. – LLEA

1

Essayez ceci:

public ListBoxItem MyProperty 
{ 
    get 
    { 
     if (this.DesignMode) 
     { 
      return new ListBoxItem("empty"); 
     } 
     else 
     { 
      return comboBox1.SelectedItems[0]; 
     } 
    } 
} 

Le getter sera toujours appelé, mais vous pouvez contrôler ce qui est renvoyé ici.

Ou, je pense que mettre l'attribut [Browsable (false)] au-dessus du getter pourrait fonctionner, aussi, mais je ne suis pas sûr.

+0

Je suppose que mon code est tout simplement mauvais. J'ai un événement qui enregistre un changement de l'index sélectionné du CB. le concepteur appelle le getter, l'événement est déclenché et une méthode qui accepte l'élément sélectionné déclenche une exception (type faux). Bien sûr, je peux vérifier dans la méthode si l'article présenté est du bon type. etc. Mais j'aimerais vraiment savoir si l'on peut simplement cacher des getters au concepteur ou est-ce que cette demande est aussi une mauvaise idée? – LLEA

+0

Il est parfois difficile d'avoir des contrôles normaux dans le concepteur, mais avoir des combos sur un formulaire est assez normal, donc je ne sais pas exactement pourquoi vous avez ce problème. Une solution simple consisterait à attacher uniquement l'événement change à la zone de liste déroulante lors de l'exécution. Dans l'événement load, vous pouvez placer quelque chose comme 'cb.onChange + = new EventHandler ...', au lieu de sélectionner cet événement dans le concepteur et de double-cliquer dessus. – MusiGenesis

+0

Merci pour vos efforts. Je pourrais utiliser la partie avec this.DesignMode. En plus de cela, vous avez raison. Il y a plusieurs façons de contourner ce problème, mais j'étais juste curieux ... et maintenant j'ai eu une réponse. – LLEA

Questions connexes