Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/300.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#_Undo Redo - Fatal编程技术网

C# 撤消重做堆栈

C# 撤消重做堆栈,c#,undo-redo,C#,Undo Redo,我正在使用堆栈制作一个简单的UndoRedo框架,但由于某些原因,有些东西不起作用。 我有这个代码来存储一个对象的属性,在这个例子中是一个ColorBlend public static ColorBlend _BG_Blend = new ColorBlend(); public ColorBlend BG_Blend { get { return _BG_Blend; } set { AddLog("BG_Blend", _BG_Blend); //N

我正在使用堆栈制作一个简单的UndoRedo框架,但由于某些原因,有些东西不起作用。 我有这个代码来存储一个对象的属性,在这个例子中是一个ColorBlend

public static ColorBlend _BG_Blend = new ColorBlend();
public ColorBlend BG_Blend
{
    get { return _BG_Blend; }
    set
    {
        AddLog("BG_Blend", _BG_Blend); //Name && Property Value
        _BG_Blend = value;                   
    }
}
现在,每次我更改混合,它都会将新属性存储在堆栈中,并发送一个信号,表示新操作可以撤消。 如果日志中有5种不同的颜色混合,当我点击Undo时,它会返回存储的属性,但是它们都有相同的颜色,位置都相同。
有人知道为什么吗?

在您指定的setter中

_BG_Blend = value;                   
在getter中,您返回

return _BG_Blend;
因此,是的,无论堆栈中有什么,都将获得最后一个赋值


看起来,在getter中,您需要从堆栈返回值,而不是backing字段值。

在您指定的setter中

_BG_Blend = value;                   
在getter中,您返回

return _BG_Blend;
因此,是的,无论堆栈中有什么,都将获得最后一个赋值


在getter中,似乎需要从堆栈返回值,而不是backing字段值。

如果修改
BG\u Blend
并在堆栈中存储对它的引用,堆栈中的所有引用都将指向同一实例。在堆栈中存储实例时,需要创建一个新实例。在更改
ColorBlend
之前复制一份副本,并将副本存储在堆栈中。

如果修改
BG\u Blend
并在堆栈中存储对它的引用,堆栈中的所有引用将指向同一实例。在堆栈中存储实例时,需要创建一个新实例。在更改前复制一份
颜色混合
,并将副本存储在堆栈中。

问题是,您总是在堆栈中存储相同的对象引用(即
\u BG\u混合
),这意味着堆栈中的每个条目都指向相同的对象,更准确地说是您最后插入的对象。对于每个混合,您应该存储一个新的引用。

问题是,您总是在堆栈中存储相同的对象引用(即
\u BG\u blend
),这意味着堆栈中的每个条目都指向相同的对象,更准确地说是您最后插入的对象。对于每个混合,您应该存储一个新的引用。

您的
\u BG\u混合
成员变量是
静态的
,因此它只有一个实例。每次推送新混合时,都会用新值覆盖静态变量,但由于所有撤消步骤都指向该共享值,因此它们都会被该值“覆盖”


只需删除
static
修饰符。

您的
\u BG\u Blend
成员变量是
static
,因此它只有一个实例。每次推送新混合时,都会用新值覆盖静态变量,但由于所有撤消步骤都指向该共享值,因此它们都会被该值“覆盖”


只需删除
静态
修饰符。

您必须显示所有实现。我们无法猜测只有几行代码会出现什么问题。你说的是什么撤销/重做框架?是这个吗:?您必须显示所有的实现。我们无法猜测只有几行代码会出现什么问题。你说的是什么撤销/重做框架?这是一个:?这是由UndoRedoFramework完成的,每次堆栈之一发生更改时,它都会更新parrentobject@user2147134,所以也许。。。您将向我们展示您的所有代码以及如何使用它?我们的水晶球从周一开始离线。这是由UndoRedoFramework完成的,每次堆栈中的一个更改它都会更新parrentobject@user2147134,所以也许。。。您将向我们展示您的所有代码以及如何使用它?我们的水晶球从周一开始下线。