winUserControl в VS2010 - свойства не отображаются в конструкторе - PullRequest
5 голосов
/ 16 августа 2011

У меня проблема с (я полагаю) моей средой Visual Studio 2010 Express: когда я проектирую свой собственный UserControl, в сетке Свойства я не вижу общедоступные свойства этого элемента управления. Однако они видны в проекте, которые ссылаются на этот элемент управления.
Поскольку это Express Edition, я создаю новый пустой проект, а затем добавляю новый UserControl.
Затем для теста я поставил следующий код:

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();
        }
    }
}  

В VS 2008, как я помню, это должно быть достаточно для отображения свойства MyNumber в сетке свойств, даже без атрибута [Browsable(true)]. Однако в VS 2010, когда я дважды щелкаю UserControl1.cs в обозревателе решений и просматриваю Свойства, я не вижу MyNumber.
Когда я ссылаюсь и использую этот элемент управления в другом проекте, появляется доступ к его свойствам.

Я пытался переустановить среду VS 2010, включая SP1, но безуспешно. У вас есть идеи, что может быть не так?

Кстати: ни один из этих атрибутов не работает, либо:

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

С уважением,
Marcin

Ответы [ 3 ]

8 голосов
/ 16 августа 2011

Я считаю, что это нормальное поведение VS2010, и я предполагаю, что оно разработано. Он ведет себя так же для меня в 2010 Ultimate. Поместив UserControl1 в форму, вы увидите ее пользовательские свойства.

Полагаю, это потому, что когда вы разрабатываете элемент управления, экземпляра вашего элемента управления еще нет (возможно, он даже не был скомпилирован). То, на что вы смотрите, является экземпляром UserControl. Когда вы компилируете свой элемент управления, а затем добавляете его в форму, дизайнер создает экземпляр вашего элемента управления, чтобы его свойства можно было просматривать и манипулировать ими.

0 голосов
/ 16 августа 2011

Это не будет работать из-за того, как VS обрабатывает ascx'ы в Designer. Подробнее см. этот отличный ответ на SO.

Если ответ не тот, который вы ожидали, вы все равно можете перенести .ascx в библиотеку управления пользователями, как я описал в моем блоге .

Если бы у меня был выбор, я бы начал со всего своего кода ascx как Пользовательские элементы управления веб-сервера .

0 голосов
/ 16 августа 2011

Я раньше не использовал тег [Browsable].Однако ниже приведен пример того, что я использую в одном из моих проектов.

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

Полагаю, вам нужно добавить категорию.

...