Почему свойства моего контроля не изменятся за пределами своего класса?

StackOverflow https://stackoverflow.com/questions/4454674

  •  10-10-2019
  •  | 
  •  

Вопрос

Я новичок в C#, но не новичок в кодировании-благодаря тому, что я делаю это почти два десятилетия-и у меня есть проблемы со свойствами в пользовательском контроле, который я строю, который наследует от панели. Когда я поместил свои свойства, я вижу их в списке свойств дизайнера и даже могу установить их, но при запуске моего маленького приложения кажется, что эти значения свойств не используются. То же самое, если я изменяю свойство программно: без ошибок, но мой контроль ничего не делает, как будто они не установлены должным образом. Однако, если я делаю это программатически, проведя класс, они работают. Я предполагаю, что что -то в моих свойствах, установленных/получить вещи, не так. Пожалуйста, смотрите в следующем коде, как я это делаю:

public class ColorStrip : Panel
{
    // properties
    // ------------------------------------------
    // size of color clusters (boxes)
    private int _clusterSize = 20;
    // controls if show the buttons panel
    private Boolean _showButtons;

    // property setters/getters
    // ------------------------------------------
    // clusterSize...
    public int clusterSize
    {
        get { return _clusterSize; }
        set { _clusterSize = value; }
    }
    // showButtons...
    public Boolean showButtons
    {
        get { return _showButtons; }
        set { Console.Write(_showButtons); _showButtons = value; }
    }
    ....

Итак, в моей форме, например, в загрузке или даже в событии щелчка где -то, если я положу colorstrip1.showbuttons = false; или colorstrip1.showbuttons = true; Как бы то ни было (ColorStrip1 будет именем экземпляра после размещения элемента управления в форме в режиме дизайна) ... Консоль. Даже если я установил его в списке свойств дизайна как «истинную», это не будет отражать урегулированное значение, даже если я по умолчанию его в True, оно никогда не будет изменяться извне. Любые идеи? Не из методов не получают новое и внешнее значение свойства, ни другое, очевидно, что вещь Getter/Setter не работает. Мне кажется, я не все делаю так, как я установил или получаю свои свойства вне класс. Это работает только внутри, как очарование ... любая помощь ... очень ценю!

Ваше здоровье

литий

PS, чтобы уточнить решение:

Установка свойства в этом случае не работал, потому что я пытался использовать новое установленное значение в конструкторе, что, кажется, не может получить новые ценности, так как это, ну, в общем, создает вещь. Если я Измените стоимость свойства В режиме проектирования> Редактор свойств или в коде внешне к объекту, скажем, в событии загрузки родительской формы, это изменит его, но читается для всех методов, кроме конструктора, конечно :)

Это было полезно?

Решение

Вероятно, это проблема порядка исполнения. Ваш комплект свойств просто устанавливает переменную, но на самом деле ничего не запускает в элементе управления для обновления состояния, связанного с этой переменной (например, добавление или отображение кнопок, которые, как я предполагаю,).

Когда вы устанавливаете свойство, ставшее, остальная часть инициализации выполняется, значение используется, в противном случае это не так, потому что во время начального уровня значение по умолчанию по -прежнему остается значением свойства.

Вы должны действовать на сеттере, вот немного псевдокода, чтобы проиллюстрировать:

set {
  _showButtons = value;
  if (alreadyInitialized) {
    UpdateButtons();
  }
}

ПРИМЕЧАНИЕ. Обязательно установите значение, затем действуйте - иначе вы в конечном итоге используете старое значение (точно так же, как ваш Console.Write() делается).

Другие советы

Цитированный код не выглядит проблематично. Вы уверены, что ссылаетесь на один и тот же экземпляр Colorstrip? Также проверьте свой файл .designer.cs, чтобы убедиться, что настройка кода есть.

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

public int clusterSize { get;set;}
public Boolean showButtons {get;set;}

public ColorStrip() { ... clusterSize = 20; ... }
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top