У меня проблемы со свойствами базовой формы, не поддерживающими состояние в унаследованной форме.
Среда:
Ниже приведен исходный код и шаги для воспроизведения:
using System;
using System.ComponentModel;
using System.Windows.Forms;
namespace Test
{
public partial class BaseForm : Form
{
[DefaultValueAttribute(true)]
public bool ControlVisible
{
get
{
return this.checkBox1.Visible;
}
set
{
this.checkBox1.Visible = value;
}
}
[DefaultValueAttribute(false)]
public bool ControlChecked
{
get
{
return this.checkBox1.Checked;
}
set
{
this.checkBox1.Checked = value;
}
}
public BaseForm()
{
InitializeComponent();
}
}
}
В приведенном выше примере свойства по умолчанию совпадают с [DefaultValueAttribute], т.е. InitializeComponent () checkBox1.Visible имеет значение true, а checkBox1.Checked - false. Это настройки по умолчанию для элемента управления при перетаскивании в форму.
Затем я создал следующую унаследованную форму:
using System;
using System.ComponentModel;
using System.Windows.Forms;
namespace Test
{
public partial class Form1 : BaseForm
{
public Form1()
{
InitializeComponent();
}
}
}
Проблема и шаги для воспроизведения:
Когда я открываю Form1 в конструкторе, свойства следующие состояние.
Состояние: ControlChecked = False - ControlVisible = True (жирный)
ControlVisible установлен на True , как и ожидалось, однако он выделен жирным шрифтом. [DefaultValueAttribute] установлен на true в базовой форме, поэтому я ожидал, что это свойство не будет выделено жирным шрифтом.
Теперь я изменяю ControlVisible на False в конструкторе. Полужирный шрифт отключается.
Состояние: ControlChecked = False - ControlVisible = False
Теперь я перестраиваю проект, и код в Form1 восстанавливается. Свойство ControlVisible возвращается к True жирным шрифтом.
Состояние: ControlChecked = False - ControlVisible = True (жирный)
Я изменяю ControlChecked с False на True , и он становится жирным, как и ожидалось.
Состояние: ControlChecked = True (жирный) - ControlVisible = True (жирный)
Я перестраиваю проект, без изменений.
Состояние: ControlChecked = True (жирный) - ControlVisible = True (жирный)
Теперь я изменяю свойство ControlVisible с True на False и заново строю проект. ControlVisible возвращен к True жирным шрифтом.
Состояние: ControlChecked = True (жирный) - ControlVisible = True (жирный)
ControlChecked , похоже, работает должным образом. ControlVisible продолжает переключаться обратно на True , когда для него установлено значение false, а жирный шрифт меняется на противоположное. Мне кажется, что каким-то образом [DefaultAttributeValue] из true в базовой форме не распознается.
Обновление: Отредактировано, чтобы исправить ошибку и более точно изолировать проблему.
Обновление: Если я установил checkBox1.Visible = false в конструкторе BaseForm, все будет работать, как ожидалось. Итак, в итоге получается, что проблема заключается в том, чтобы получить атрибут DefaultValueAttribute true для распознавания в настраиваемом свойстве в унаследованной форме.