2014-02-20 70 views
3

我想创建一个自定义可折叠面板用于我的项目之一。我设置它来显示哪些边应该能够折叠,并且它需要一个字符串输入{"None", "Up", "Right", "Down", "Left", "All"};c#usercontrol设置自定义属性的选项列表

这是我到目前为止有:

public partial class CollapsiblePanel : UserControl 
{ 
    # region Collapse Direction 
    List<string> DirectionOptions = new List<string> { "None", "Up", "Right", "Down", "Left", "All" }; 
    [Browsable(true), DefaultValue("All"), Description("Direction panel collapses. 0-none, 1-up, 2-right, 3-down, 4-left, 5-all")] 
    [ListBindable(true), Editor(typeof(ComboBox), typeof(UITypeEditor))] 
    private string _direction = "All"; 
    public List<string> Direction 
    { 
     get { return DirectionOptions; } 
     set 
     { 
      DirectionOptions = value; 
      callCollapseDirectionChanged(); 
     } 
    } 

    public event Action CollapseDirectionChanged; 
    protected void callCollapseDirectionChanged() 
    { 
     Action handler = CollapseDirectionChanged; 
     DisplayButtons(); 
     if (handler != null) 
     { 
      handler(); 
     } 
    } 
    # endregion 

    public CollapsiblePanel() 
    { 
     InitializeComponent(); 
    } 

    private void DisplayButtons() 
    { 
     switch (_direction) 
     { 
      case "None": 
       buttonDown.Visible = false; 
       buttonUp.Visible = false; 
       buttonRight.Visible = false; 
       buttonLeft.Visible = false; 
       break; 

      case "Up": 
       buttonDown.Visible = false; 
       buttonUp.Visible = true; 
       buttonRight.Visible = false; 
       buttonLeft.Visible = false; 
       break; 

      case "Right": 
       buttonDown.Visible = false; 
       buttonUp.Visible = false; 
       buttonRight.Visible = true; 
       buttonLeft.Visible = false; 
       break; 

      case "Down": 
       buttonDown.Visible = true; 
       buttonUp.Visible = false; 
       buttonRight.Visible = false; 
       buttonLeft.Visible = false; 
       break; 

      case "Left": 
       buttonDown.Visible = false; 
       buttonUp.Visible = false; 
       buttonRight.Visible = false; 
       buttonLeft.Visible = true; 
       break; 

      case "All": 
       buttonDown.Visible = true; 
       buttonUp.Visible = true; 
       buttonRight.Visible = true; 
       buttonLeft.Visible = true; 
       break; 
     } 
    } 
} 

有人能向我解释如何让设计师赋予用户DirectionOptions列表作为可能的值?他们可以选择任何一个字符串作为值。

回答

3

用户应该能够选择多个选项还是只有一个?

如果它只是一个 - 那么属性应该是一个枚举而不是一个列表。

像这样的东西应该工作:

public partial class CollapsiblePanel : UserControl 
{ 
    public enum CollapseDirection 
    { 
     None, 
     Up, 
     Right, 
     Down, 
     Left, 
     All 
    } 

    # region Collapse Direction 

    [Browsable(true), DefaultValue("All"), Description("Direction panel collapses. 0-none, 1-up, 2-right, 3-down, 4-left, 5-all")] 
    [ListBindable(true), Editor(typeof(ComboBox), typeof(UITypeEditor))] 
    private CollapseDirection _direction = CollapseDirection.All; 
    public CollapseDirection Direction 
    { 
     get { return _direction; } 
     set 
     { 
      _direction = value; 
      callCollapseDirectionChanged(); 
     } 
    } 

    public event Action CollapseDirectionChanged; 
    protected void callCollapseDirectionChanged() 
    { 
     Action handler = CollapseDirectionChanged; 
     DisplayButtons(); 
     if (handler != null) 
     { 
      handler(); 
     } 
    } 
    # endregion 

    public CollapsiblePanel() 
    { 
     InitializeComponent(); 
    } 

    private void DisplayButtons() 
    { 
     switch (_direction) 
     { 
      case CollapseDirection.None: 
       buttonDown.Visible = false; 
       buttonUp.Visible = false; 
       buttonRight.Visible = false; 
       buttonLeft.Visible = false; 
       break; 

      case CollapseDirection.Up: 
       buttonDown.Visible = false; 
       buttonUp.Visible = true; 
       buttonRight.Visible = false; 
       buttonLeft.Visible = false; 
       break; 

      case CollapseDirection.Right: 
       buttonDown.Visible = false; 
       buttonUp.Visible = false; 
       buttonRight.Visible = true; 
       buttonLeft.Visible = false; 
       break; 

      case CollapseDirection.Down: 
       buttonDown.Visible = true; 
       buttonUp.Visible = false; 
       buttonRight.Visible = false; 
       buttonLeft.Visible = false; 
       break; 

      case CollapseDirection.Left: 
       buttonDown.Visible = false; 
       buttonUp.Visible = false; 
       buttonRight.Visible = false; 
       buttonLeft.Visible = true; 
       break; 

      case CollapseDirection.All: 
       buttonDown.Visible = true; 
       buttonUp.Visible = true; 
       buttonRight.Visible = true; 
       buttonLeft.Visible = true; 
       break; 
     } 
    } 
} 
  • 注意 - 这是指南 - 我没有测试的代码,但应该把你在你想达到什么样的大方向。
+0

非常感谢。这就是它。 – Chris