UserControl -设置属性值
本文关键字:属性 设置 UserControl | 更新日期: 2023-09-27 18:08:09
我试图为WinForms
应用程序设计我的自定义UserControl
。我曾经创建自定义enum属性,它可以完美地工作,并在用户在设计时更改属性值时创建一个CheckBox
。
private SearchOptionsEnum _searchAreas;
//private List<bool> _searchAreas = new List<bool>();
[Description(""), Category("GostcompSettings")]
[DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]
[Editor(typeof(Utils.FlagEnumUIEditor), typeof(UITypeEditor))]
public SearchOptionsEnum SearchAreas
//public List<bool> SearchAreas
{
get
{
return _searchAreas;
}
set
{
_searchAreasChceckBoxList.Clear();
pPanelWithCheckboxies.Controls.Clear();
int x = 10;
int y = 10;
CheckBox _tempCheck = new CheckBox();
_tempCheck.Checked = true;
_tempCheck.Location = new Point(x, y);
_searchAreasChceckBoxList.Add(_tempCheck);
pPanelWithCheckboxies.Controls.Add(_tempCheck);
MessageBox.Show("zmiana");
_searchAreas = value;
}
}
我在代码中使用自定义值编辑器UITypeEditor,它工作得很好。
我在设计时得到MessageBox和CheckBox出现。问题是当我将SearchOptionsEnum更改为List<bool>
和编辑器更改为默认的Boolean Collection Editor
时。
然后CheckBox不出现,甚至调试器断点放在set属性中也不会停在那里…
问题在哪里?
此外:当我在编辑器中编辑bool值时,它会记住它并保留值。即使在下一个调试会话中,也会保留之前设置的值。
编辑public partial class StudySearchAndView : UserControl
{
private List<CheckBox> _searchAreasChceckBoxList = new List<CheckBox>();
private SearchOptionsEnum _searchAreas;
//private List<bool> _searchAreas = new List<bool>();
[Description(""), Category("GostcompSettings")]
[DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]
[Editor(typeof(Utils.FlagEnumUIEditor), typeof(UITypeEditor))]
public SearchOptionsEnum SearchAreas
//public List<bool> SearchAreas
{
get
{
return _searchAreas;
}
set
{
_searchAreasChceckBoxList.Clear();
pPanelWithCheckboxies.Controls.Clear();
int x = 10;
int y = 10;
CheckBox _tempCheck = new CheckBox();
_tempCheck.Checked = true;
_tempCheck.Location = new Point(x, y);
_searchAreasChceckBoxList.Add(_tempCheck);
pPanelWithCheckboxies.Controls.Add(_tempCheck);
MessageBox.Show("zmiana");
_searchAreas = value;
}
}
}
pPanelWithCheckboxies
只是一个面板掉落在UserControl.
控件仅在设置了Parent时显示。你应该将_tempCheck的父类设置为this。
CheckBox _tempCheck = new CheckBox();
_tempCheck.Parent = this;
_tempCheck.Checked = true;
_tempCheck.Location = new Point(x, y);