C# 实现过程 block

标签 c# winforms oop

在我的 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/

相关文章:

c# - 如何在 C# 中创建公共(public)但不可继承的方法或属性?

c# - 在文本框 C# 中键入时搜索

c# - 以编程方式添加 Adomd 参数 C#

c# - USB 中继单元编程

c# - 如何创建一个带有三个点的小按钮?

php - 您将如何为这个应用程序建模?

php - 既然可以在声明时设置变量,为什么还要在 PHP 类的结构中设置变量呢?

java - 如何将 lambdas 用于具有多种方法的接口(interface)?

c# - 如何在字符串文字中引用\"(斜杠双引号)?

c# - 关闭浏览对话框导致窗体关闭