Пользовательский элемент управления Winform: почему Setter не вызывается при использовании из конструктора? - PullRequest
2 голосов
/ 03 декабря 2010

У меня есть свойство начального значения, подобное этому:

    [Category("Main")]
    [Description("Intial Value")]
    [DefaultValue(10)]
    public int InitialValue
    {
        get { return m_initialValue; }
        set { 
            m_initialValue = value;
            this.TrackBar.Value = this.m_initialValue;
        }
    }

Так что в моем конструкторе я делаю это, например:

        this.InitialValue = 10;

К моему удивлению при перетаскивании пользовательского элемента управления напотому что сеттер не вызывается, поэтому мое значение трекбара не синхронизируется.

Почему?

Только когда я изменяю свойство в диалоговом окне, вызывается сеттер.

Ответы [ 3 ]

2 голосов
/ 04 декабря 2010

Я решил воспользоваться вашим советом, как предложено в одном из комментариев:

Вы можете попробовать самостоятельно, это займет 2 минуты.

Так я и сделал (этопотребовалось около 3 минут), и я не смог воспроизвести описанное вами поведение.

Вот точные шаги, которые я выполнил:

  1. Созданновое приложение Windows Forms.
  2. Добавлен новый пользовательский элемент управления в мой проект.
  3. Открыт новый пользовательский элемент управления в режиме конструктора и добавлен элемент управления TrackBar (оставив все свойства элемента управления TrackBar всеустановить их значения по умолчанию).
  4. Добавлен следующий код в класс User Control (точно такой же, как вы опубликовали выше), с добавлением закрытого поля m_initialValue, которое вы пропустили в исходном примере):

    public class UserControl1 : UserControl
    {
       public UserControl1()
       {
           InitializeComponent();
           this.InitialValue = 10;
       }
    
    
       [Category("Main")]
       [Description("Intial Value")]
       [DefaultValue(10)]
       public int InitialValue
       {
           get { return m_initialValue; }
           set
           {
               m_initialValue = value;
               this.trackBar1.Value = this.m_initialValue;
           }
       }
    
    
       int m_initialValue;
    }
    

  5. Построен проект.
  6. Открыта форма по умолчанию (Form1), созданная с новым проектом впредставление дизайна.
  7. перетащил пользовательский элемент управления, который я только что создалted (UserControl1) из панели инструментов, где он был автоматически размещен, и на поверхность формы.

Индикатор на ползунке появился до вправо side (правильная и ожидаемая позиция с учетом значения по умолчанию Maximum 10).Теперь вы говорите мне: Что мы делаем по-другому?

0 голосов
/ 03 декабря 2010

Ключевая часть вашего вопроса находится здесь:

при перетаскивании пользовательского элемента управления на форму

Вы все еще в дизайнере, и дизайнер немного обманывает, чтобы визуализировать вещи. Это все еще происходит, когда вы действительно запускаете приложение?

0 голосов
/ 03 декабря 2010

Попробуйте добавить [Browsable(true)].

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...