0

我有一个自定义控件,其中一个属性是:

public List<SelectionBox> Boxes { get; set; }

在控制构造函数中,我有:

this.Boxes = new List<SelectionBox>();
this.Boxes.Add(new SelectionBox("", Color.Red));

在 InitializeComponent() 之前,如果我在此处设置断点,则表明 Boxes 是具有 1 个元素的 SelectionBox 列表。但是在我的 OnPaint 覆盖内部,如果我执行以下操作,它已被设置为 null 并出现一些奇怪的行为:

foreach (SelectionBox box in Boxes) {}

它不会抛出错误,它只是在那里退出函数。我究竟做错了什么?

选择框结构:

[Serializable]
public struct SelectionBox
{
    public string Name;
    public Color Colour;
    public Rectangle BoxRectangle;
    public bool IsActive;

    public SelectionBox(string name, Color colour)
    {
        this.Name = name;
        this.Colour = colour;
        this.IsActive = false;
        this.BoxRectangle = new Rectangle(0, 0, 0, 0);
    }
}
4

1 回答 1

1

如果您需要追踪一个属性是如何神秘地将其值设置为 null,请使用显式 get/set 实现重写该属性,在 setter 中放置一个断点,并在断点被命中时检查调用堆栈

private List<SelectionBox> _boxes;
public List<SelectionBox> Boxes { get { return _boxes; } set { _boxes = value; } }
于 2012-12-16T04:27:54.133 回答