Свойство элемента управления Поверхность проектирования включено для элемента управления - PullRequest
0 голосов
/ 02 мая 2011

У меня есть небольшое приложение, которое реализует DesignSurface, а также propertyGrid. Сетка свойств отслеживает атрибут свойства «IdeAccessable». Чтобы каждое свойство стало доступным, я перезаписываю базовое свойство и добавляю этот атрибут.

public class MyButton : Button {
[IdeAccessable()]
public new int Height { get { retun base.Height; } set { base.Height = value } }

[IdeAccessable()]
public new int Width { get { retun base.Width ; } set { base.Width = value } }

[IdeAccessable()]
public new bool Enabled { get { retun base.Enabled ; } set { base.Enabled = value }}

[IdeAccessable()]
public new bool Visible { get { retun base.Visible ; } set { base.Visible = value }

}

Это отлично работает для всех, но для Enabled и Visible. Эти два свойства, по-видимому, не делегируются во время «Design Time» и не имеют никакого эффекта. Во время сериализации сохраняют их значение по умолчанию / базовое значение. Как переопределить включено и видно, что работа во время разработки / делегирована правильно?

подробности:

DesignSurface используется в автономном приложении, написанном на c #. Конструкторская поверхность прикреплена к стандартной WinForm, которая является базовой конструкторской поверхностью. Элементы размещаются пользователем через ToolBoxService . Элементы управления в основном являются стандартными элементами управления winform, такими как кнопки, метки и т. Д. Чтобы контролировать количество видимых элементов, которые отображаются через PropertyEditor, прикрепленный к DesignSurface-Services, все элементы управления были получены (см. Пример), чтобы пометить свойства с помощью пользовательских IdeAccessableAttribute.

Когда эти макеты сериализуются во время сохранения или выполнения, все элементы управления и компоненты представляются на языке сценариев (lua). Во время этого процесса serilizaion (в сущности, цикл над всеми дочерними элементами, лежащими в форме) происходит прикосновение к каждому элементу управления и каждое свойство флажка с атрибутом IdeAccessable сохраняется. Во время отладки я обнаружил, что, как было объяснено, такие значения, как включенные и видимые, не устанавливаются, несмотря на то, что редактор свойств показывает правильное значение. Это приводит к тому, что компонент, отключенный во время разработки, включен во время моей собственной работы. Другой эффект заключается в том, что настройки редактора свойств для свойства visible всегда имеют значение false. Изменение его в редакторе свойств показывает правильное значение, но никогда не применяется к реальному значению.

Возможное решение может быть:

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

Проблема с этим решением:

Из-за того, что элементы управления не имеют общего базового класса, рассматриваемые части должны быть переписаны для каждого производного элемента управления индивидуально, что приведет к большому количеству избыточного кода. Не производные элементы управления больше не возможны. Любое изменение в логике будет означать, что оно должно быть изменено примерно в 50 классах. Кроме того, внедрение новых элементов управления приведет к гораздо большей работе, чем необходимость.

...