Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 单例还是静态类,或者两者都不是?_C#_Winforms - Fatal编程技术网

C# 单例还是静态类,或者两者都不是?

C# 单例还是静态类,或者两者都不是?,c#,winforms,C#,Winforms,我正在创建一个Windows窗体应用程序,它基本上是绘画的再创造。我有一个包含各种按钮的工具条,我可以将位图的副本拖到图表上,并将其放在绘图面板上。但是,我想添加一个功能,即能够在面板周围移动位图,并使用线角和线中间的9个节点重新调整其大小 目前我的表格有一个 List<Diagram> theDiagrams; 列出图表; 其中包含自定义关系图对象的列表。每个图都代表绘图面板上的位图,它有坐标、大小、z索引、位图和一些其他信息。但是现在我只希望有焦点的图能够被编辑,或

我正在创建一个Windows窗体应用程序,它基本上是绘画的再创造。我有一个包含各种按钮的工具条,我可以将位图的副本拖到图表上,并将其放在绘图面板上。但是,我想添加一个功能,即能够在面板周围移动位图,并使用线角和线中间的9个节点重新调整其大小

目前我的表格有一个

    List<Diagram> theDiagrams; 
列出图表;
其中包含自定义关系图对象的列表。每个图都代表绘图面板上的位图,它有坐标、大小、z索引、位图和一些其他信息。但是现在我只希望有焦点的图能够被编辑,或者在外部有9个节点能够移动/重新调整大小。我正在考虑创建一个类,它是我目前拥有的Diagram类的派生,但是我只想创建其中的一个。我应该创建一个静态类,或者可能使用单例设计模式来确保一次只能创建其中一个对象。理想情况下,我希望这个类从一开始就为null,并且只在必要时设置为图表的副本

我更不想为这个特定场景设计类,所以我认为不需要太多代码来理解我所说的要点。但是,如果您觉得需要一些我所说的示例,我非常乐意与您分享这些代码,以确保我能够提供最好的解决方案


如果您不理解我的问题,我应该使用单例设计模式、静态类还是两者都不使用来实现我的目标?

在这种情况下,我会避免使用静态和单例模式。如果您有多个表单(MDI应用程序),该怎么办

所选位图/图层类似于图像/窗体的属性,任何模块或类都不能直接更改它。图像类控制着
列表


我认为你应该有一个
私有图来选择图表字段,该字段包含在包含<代码>的同一控件/表单中定义的当前选定图表,该控件/表单列出了这些图表
字段

绘制完整列表时,应跳过所选列表,并将其绘制为最后一个图表。(因此它将是最顶级的)

只是一个想法

private void UpdateBitmap()
{
    foreach(var diagram in theDiagrams)
    {
        if(diagram == selectedDiagram)
            continue;

        // draw
    }

    if(selectedDiagram != null)
    {
        // draw with corner nodes and/or other helper controls (z-top)

        // does the corner nodes and/or other helper controls exists?
        if(!areEditControlsCreated)
             CreateEditControls();

    }
    else
    {
        if(areEditControlsCreated)
             DestroyEditControls();

    }
}
取消选择图表时,只需清除
selectDiagram=null字段并重新绘制位图