我正在尝试复制并粘贴列表的一部分。不幸的是,当从剪贴板粘贴时,条件会找到存储的数据,但是当分配给变量时,它仍然等于null。 这是我的列表和列表项的代码。
public class ListCanvasBlocks : List<MyBlock>
{
public List<MyBlock> MyCopySelectedObj()
{
var x = new List<MyBlock>();
x.AddRange(this.Where(z => z.IsSelected));
return x;
}
}
[Serializable]
public class MyBlock
{
public MyBlock(Rectangle rect, BlocksData.Shape shape,int id)
{
Rect = rect;
Shape = shape;
Text = BlocksData.Text(Shape);
ID = id;
}
public string Text;
public bool IsSelected { get; set; } = false;
public bool IsLocked = false;
public int ID{ get; set; }
public Point PointInput;
public Point PointOutput1, PointOutput2;
public Rectangle Rect;
public SolidBrush BackColor;
public Color FontColor;
public int FontSize;
public BlocksData.Shape Shape{get;set;}
}
这就是我按ctrl + c / v
时的操作 public void Copy()
{
Clipboard.Clear();
Clipboard.SetData("ListCanvasBlocks", _canvObj.MyCopySelectedObj());
}
public void Paste()
{
if (Clipboard.ContainsData("ListCanvasBlocks"))
{var test = (ListCanvasBlocks)Clipboard.GetData("ListCanvasBlocks");}
}
Paste方法中的条件返回true但是在赋值后变量test仍为null
BlockData.Shape是枚举
答案 0 :(得分:1)
您正在尝试剪切并粘贴ListCanvasBlocks
,但MyCopySelectedObj()
方法会返回List<MyBlock>
,这是一种超类型。运行时无法自动从常规转换为特定的。
尝试更改此内容:
public class ListCanvasBlocks : List<MyBlock>
{
public ListCanvasBlocks MyCopySelectedObj()
{
var x = new ListCanvasBlocks();
x.AddRange(this.Where(z => z.IsSelected));
return x;
}
}
答案 1 :(得分:0)
当我尝试将变量单独添加到剪贴板时,结果发现问题是serialization
。该问题已在SolodBrush
中得到解决,因为它的attribute is Color
只能序列化没有属性的变量。
There当我发现什么是真正的问题时,我找到了解决方案
答案 2 :(得分:0)
看起来MyCopySelectedObj()返回一个MyBlock List,它被赋予Copy()上的名称“ListCanvasBlocks”,但是当你调用Paste()时,你将剪贴板中的List转换为Object(ListCanvasBlocks)。它继承自List,但仍然不是对象类型ListCanvasBlocks。在调用Paste()时,尝试直接将List转换为该var测试。