Я бы увидел созданный вами UserControl как «визуализатор» экземпляра ProcessBlock
.
Итак, что бы я сделал - учитывая предоставленную вами информацию - это создание абстрактного класса (или интерфейса, это зависит) 'ProcessBlock
', который имеет некоторые абстрактные методы, такие как GetDrawingColor
.
Для каждого конкретного ProcessBlock
вы создаете новый класс, который наследуется от абстрактного класса (или интерфейса).
Таким образом, у вас могут быть ProcessBlockA, ProcessBlockB и ProcessBlockC, которые наследуются от базового класса ProcessBlock.
В каждом конкретном подклассе вы переопределяете метод GetDrawingColor
, чтобы он возвращал Color
, который вы хотите получить.
Затем вы передаете экземпляр ProcessBlock в UserControl, и UserControls вызывает метод GetDrawingColor
, и он использует результат, чтобы закрасить фон.
Например:
public abstract class ProcessBlock
{
public abstract Color GetDrawingColor();
}
public class ProcessBlockA : ProcessBlock
{
public override Color GetDrawingColor()
{
return Color.Blue;
}
}
public class ProcessBockB : ProcessBlock
{
public override Color GetDrawingColor()
{
return Color.Red;
}
}
public ProcessBlockVisualizer : UserControl
{
private ProcessBlock _pb;
public ProcessBlockVisualizer( ProcessBlock pb )
{
_pb = pb;
this.BackgroundColor = _pb.GetDrawingColor();
this.Enter += (object sender, EventArgs e)=> this.PropertyGrid.Datasource = _pb;
}
}