5 votes

winUserControl dans VS2010 - les propriétés ne sont pas visibles dans le designer

J'ai un problème avec (je suppose) mon environnement Visual Studio 2010 Express : lorsque je conçois mon propre UserControl, en Propriétés Je ne peux pas voir les propriétés publiques de ce contrôle. Elles sont pourtant visibles dans le projet, qui référence ce contrôle.
Comme il s'agit de l'édition Express, je crée un nouveau projet vide, puis j'y ajoute un nouveau UserControl.
Ensuite, pour un test, j'ai mis le code suivant :

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace Project1
{
    public partial class UserControl1 : UserControl
    {
        private int myNumber;

        [Browsable(true)]
        public int MyNumber
        {
            get
            {
                return myNumber;
            }
            set
            {
                myNumber = value;
            }
        }

        public UserControl1()
        {
            InitializeComponent();
        }
    }
}  

Dans VS 2008, si je me souviens bien, cela devrait suffire pour afficher la propriété MyNumber dans la grille de propriétés, même sans [Browsable(true)] attribut. Dans VS 2010 cependant, lorsque je double-clique sur UserControl1.cs dans l'explorateur de solutions et que je regarde dans Propriétés, je ne vois pas MonNuméro.
Lorsque je référence et utilise ce contrôle dans un autre projet, j'ai accès à ses propriétés.

J'ai essayé de réinstaller l'environnement VS 2010, y compris le SP1, mais sans succès. Avez-vous une idée de ce qui peut clocher ?

Au fait : aucun de ces attributs ne fonctionne non plus :

[Browsable(true)]
[EditorBrowsable(EditorBrowsableState.Always)]
[DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]
[Bindable(true)]

Meilleures salutations,
Marcin

8voto

Igby Largeman Points 8671

Je pense qu'il s'agit d'un comportement normal de VS2010 et je suppose qu'il a été conçu pour cela. Il se comporte de la même manière pour moi dans 2010 Ultimate. Lorsque vous placez UserControl1 sur un formulaire, vous verrez ses propriétés personnalisées.

Je pense que c'est parce que lorsque vous concevez le contrôle, il n'y a aucun instance de votre contrôle (il n'a peut-être même pas été compilé). Ce que vous recherchez est une instance de UserControl . Lorsque vous compilez votre contrôle et que vous l'ajoutez à un formulaire, le concepteur crée une instance de votre contrôle, afin que ses propriétés puissent être vues et manipulées.

0voto

Billy Points 883

Je n'ai jamais utilisé la balise [Browsable] auparavant. Cependant, vous trouverez ci-dessous un exemple de ce que j'utilise dans l'un de mes projets.

[Description("The length used to display the dimensions")]
[Category("Custom")]
public double DisplayLength { get; set; }

Je suppose que vous devez ajouter une catégorie.

0voto

devio Points 22981

Cela ne fonctionnera pas en raison de la façon dont VS gère les ascx'es dans le Designer. Pour plus de détails, voir cette excellente réponse sur SO.

Si la réponse n'est pas celle que vous attendiez, vous pouvez toujours migrer les .ascx'es vers une bibliothèque de contrôle d'utilisateur comme je l'ai décrit dans mon blog .

Si j'avais le choix, je recommencerais tout mon code ascx en tant que Contrôles de serveur Web personnalisés .

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X