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.

UserControl -设置属性值

控件仅在设置了Parent时显示。你应该将_tempCheck的父类设置为this。

        CheckBox _tempCheck = new CheckBox();
        _tempCheck.Parent = this;
        _tempCheck.Checked = true;
        _tempCheck.Location = new Point(x, y);