У меня есть различные наборы пользовательских элементов управления Winforms, все производные от Control, такие как:
CalculatorPanel, GraphPanel, DisplayPanel, etc : Control
Я использую одну форму для отображения одного или нескольких из этих наборов в зависимости от того, что пользователь хочет видеть.
У каждого из них есть член по имени:
Input
где тип отличается, например:
CalculatorInput, GraphInput, DisplayInput, etc.
Как мне сохранить их в списке или другой коллекции, где я могу без проблем вызвать свойство Input?
Должен ли я использовать общий интерфейс для каждого? Тогда это должно быть общим. Как я укажу тип?
Сейчас я использую что-то вроде этого для добавления / удаления элементов управления:
Panels = Dictionary <Enum, Control> ...
Panels.Add (PanelType.Calculator, new CalculatorInput ().Controls);
...
так что позже я могу сказать:
Form.Add/RemoveControls (Panels[PanelType.Calculator])
но как бы мне установить их свойство Input, когда мне нужно во время выполнения. Поэтому, если пользователь переключается на GraphPanel, я хочу иметь возможность установить его Input сразу после добавления его элементов управления в форму.
Есть шаблон проектирования или методика для решения этой проблемы?
РЕДАКТИРОВАТЬ: Свойства каждого типа ввода (без методов) являются следующими:
CalculatorInput:
.Result
.LastOperation
...
GraphInput:
.Result
.SelectedNode
...
DisplayInput:
.Result
.CurrentColor
...
В основном эти входы являются просто типами, которые должны быть связаны с соответствующим пользовательским интерфейсом. Поэтому, если пользовательский интерфейс имеет некоторые свойства, они привязаны к этим входным данным, поэтому, когда я назначаю новый вход, пользовательский интерфейс обновляется автоматически.
EDIT2:
Таким образом, все эти входные данные являются отдельными без наследования и т. Д.
Но определяются в соответствующих выпусках следующим образом:
class CalculatorPanel
{
CalculatorInput Input
}
class GraphPanel
{
GraphInput Input
}
class DisplayPanel
{
DisplayInput Input
}