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