在我的 C# winforms 应用程序中,我需要绘制 block 。这些 block 就是所谓的进程 block 。所有的 block 加在一起就是一个过程。有不同种类的流程 block 。此时我有三种流程 block :A、B、C。当我绘制流程 block 时,它看起来像这样:
一个
B
B
C
一个
每个方 block 都有自己的背景色。每个 block 都有自己的属性。例如:进程 block A 和 B 都具有相同的属性(ID 和描述)。区别在于 block 的背景颜色。
我已经创建了一个用户控件。这个用户控件是一个进程 block 。我已经有一个图片框,我可以在其中将用户控件(进程 block )添加到控件集合中。这很好用。关键是我不知道如何将 A、B、C 类型的进程 block 链接到用户控件。我也有一个属性网格。单击进程 block 时,我想显示它的属性值。
我不知 Prop 体如何实现。我希望你能给我指出正确的方向。
最佳答案
我会将您创建的 UserControl 视为 ProcessBlock
实例的“可视化工具”。
因此,根据您提供的信息,我要做的是创建一个抽象类(或接口(interface),视情况而定)“ProcessBlock
”,它具有一些抽象方法,例如 获取绘图颜色
。
对于每个具体的ProcessBlock
,您创建一个继承自抽象类(或接口(interface))的新类。
因此,您可以拥有从 ProcessBlock 基类继承的“ProcessBlockA”、“ProcessBlockB”和“ProcessBlockC”。
在每个具体子类中,您覆盖 GetDrawingColor
方法,以便它返回您想要的 Color
。
然后,您将 ProcessBlock 的一个实例传递给 UserControl,然后 UserControl 调用 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;
}
}
关于C# 实现过程 block ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2011901/