2015-08-17 3 views
2

Я пытаюсь создать свой собственный файл UserControl для WinForms приложений. Я использовал для создания настраиваемого свойства enum, который отлично работает и создает один CheckBox, когда пользователь меняет значение свойства во время разработки.UserControl - заданное значение для свойства

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 не появляется, и даже debbuger точки останова положить в наборе собственности не останавливается там ...

Где проблема?

Кроме того: когда я редактирую значения bool в редакторе, он запоминает и сохраняет значения. Даже в следующих значениях параметров отладки, заданных ранее, сохраняются.

EDIT

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.

+0

Можете ли вы показать больше кода для лучшего понимания? –

+0

Я попробую BooleanCollectionEditor UITypeEditor позже, возможно, некоторые ошибки там (я думаю). Тем не менее, если вы редактируете какое-то значение на странице свойств режима проектирования, оно использовалось для запоминания, записывая это значение в метод InitializeComponent(). Или я не понимаю ваш последний абзац? –

+0

@ JC да, как вы говорите –

ответ

0

Элементы управления отображаются только в том случае, если установлен родительский элемент. Вы должны установить для этого родителя _tempCheck.

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