C # usercontrol - list of options for custom property

I am trying to create my own panel for use in one of my projects. I set it up to show which sides should be able to collapse, and it accepts string input {"None", "Up", "Right", "Down", "Left", "All"};.

Here is what I still have:

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;
        }
    }
}

Can someone explain to me how to get the designer to give the user a list DirectionOptionsas possible values? They can choose any of the lines as a value.

+3
source share
1 answer

If the user can select several options or only one?

If there is only one, then the property should be Enum not List.

Something like this should work:

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;
        }
    }
}
  • - - , , .
+3

All Articles