0

カスタム コントロールがあり、プロパティの 1 つは次のとおりです。

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 実装でプロパティを書き直し、セッターにブレークポイントをドロップし、ブレークポイントに到達したときにコールスタックをチェックアウトします。

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