Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Разработка Windows Forms > Проблема с наследованием свойств


Автор: Voyager 30.3.2007, 10:02
Есть форма FormA и FormB. На форме FormA есть компонет, допустим, PanelControl (public).
Форма FormB наследуется от FormA (FormB : FormA).
У PanelControl в форме FormA свойства

Код

            this.Header.Appearance.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(224)))), ((int)(((byte)(224)))), ((int)(((byte)(224)))));
            this.Header.Appearance.BackColor2 = System.Drawing.Color.Silver;
            this.Header.Appearance.Font = new System.Drawing.Font("Segoe UI", 7.8F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(204)));
            this.Header.Appearance.Options.UseBackColor = true;
            this.Header.Appearance.Options.UseFont = true;
            this.Header.Appearance.Options.UseTextOptions = true;
            this.Header.Appearance.TextOptions.WordWrap = DevExpress.Utils.WordWrap.Wrap;
            this.Header.Dock = System.Windows.Forms.DockStyle.Top;
            this.Header.Location = new System.Drawing.Point(0, 0);
            this.Header.LookAndFeel.UseDefaultLookAndFeel = false;
            this.Header.LookAndFeel.UseWindowsXPTheme = true;


Почему после наследования в FormB (если делать какие-либо изменения в дизайнере) свойства PanelControl становятся:

Код

            this.Header.Appearance.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(224)))), ((int)(((byte)(224)))), ((int)(((byte)(224)))));
            this.Header.Appearance.BackColor2 = System.Drawing.Color.Silver;
            this.Header.Appearance.Font = new System.Drawing.Font("Segoe UI", 7.8F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(204)));
            this.Header.Appearance.Options.UseBackColor = true;
            this.Header.Appearance.Options.UseFont = true;
            this.Header.Appearance.Options.UseTextOptions = true;
            this.Header.Appearance.TextOptions.WordWrap = DevExpress.Utils.WordWrap.Wrap;
            this.Header.LookAndFeel.UseDefaultLookAndFeel = false;
            this.Header.LookAndFeel.UseWindowsXPTheme = true;


То есть свойства переписываются заново (копируются из FormA), а не наследуются по умолчанию (точнее наследуются вначале, но после изменений в дизайнере, например, размера, переписываются). Что это - особенность студии или что-то еще? Ведь если изменить в форме FormA свойства панели, то они не отобразятся в FormB, какое же тут наследование, может кто объяснить?

Автор: Naum 30.3.2007, 10:23
Насколько я знаю, наследование не подразумевает установку значений свойств и полей. Для установки значений свойств и полей в конструкторе класса-потомка нужно вызывать конструктор класса-предка.
А еще, для того, чтобы дизайнер знал, какие значения у свойтсв по умолчанию, нужно такие свойства пометить аттрибутом
DefaultValue()

Автор: Voyager 30.3.2007, 10:31
Но если я использую просто компоненты и изменяю их свойства, зачем мне ставить DefaultValue, дело не совсем в этом, дело в том, что в наследуемой форме студия "копирует" свойства из базовой формы.

Автор: mr.DUDA 30.3.2007, 18:30
Можно попробовать поставить Modifier=protected для всех наследуемых свойств. В отдельных случаях это помогает избежать дублирования кода в InitializeComponent.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)