C# usercontrol настройка списка параметров для пользовательского свойства

Я пытаюсь создать настраиваемую складную панель для использования в одном из моих проектов. У меня есть его настроить для отображения, какие стороны должны быть в состоянии свернуть, и он принимает строку ввода {"None", "Up", "Right", "Down", "Left", "All"};,

Вот что у меня так далеко:

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 перечислить как возможные значения? Они могут выбрать любую из строк в качестве значения.

1 ответ

Решение

Может ли пользователь выбрать несколько вариантов или только один?

Если его всего один - тогда свойство должно быть Enum, а не List.

Примерно так должно работать:

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;
        }
    }
}
  • Обратите внимание - это руководство - я не тестировал код, но это должно дать вам общее представление о том, чего вы хотите достичь.
Другие вопросы по тегам