我已經在winforms中創建了自定義按鈕,其中我已經添加屬性與自定義類的列表:List<Zasoby>
和只有當該列表中已滿足特定項目的項目添加到此列表的方法標準(lambda .where表達式)。 類Zasob
是可序列化的。 而在設計師,我首先添加到Zasob列表中該按鈕是這樣的:ArgumentOutOfRangeException儘管邊界檢查
bt01008xxx.Zasoby.Add(new Zasob { Lokalizacja = new Lokalizacja("01", "008", "000") });
..
public class ZasobSzczegolowoButton: Button, IAddZasoby
{
private List<Zasob> _zasoby = new List<Zasob>(); //{ new Zasob { Lokalizacja = new Lokalizacja("01", "001", "000") } };
[EditorBrowsable(EditorBrowsableState.Always)]
[Browsable(true)]
[DesignerSerializationVisibility(DesignerSerializationVisibility.Visible)]
[Bindable(true)]
public List<Zasob> Zasoby
{
get { return _zasoby; }
set
{
_zasoby = value;
if (_zasoby.Any()) BackColor = _zasoby.Sum(x => x.Ilosc) > 0 ? Color.Coral : Color.White;
}
}
public void AddZasoby(List<Zasob> zasoby)
{
var buton = Name;
if (_zasoby != null && _zasoby.Count != 0)
{
var szukaneZasoby =
zasoby?.Where(
x =>
x.Lokalizacja.ObszarKod == _zasoby[0].Lokalizacja.ObszarKod &&
x.Lokalizacja.Segment1 == _zasoby[0].Lokalizacja.Segment1);
if (szukaneZasoby == null) return;
Zasoby.Clear();
Zasoby.AddRange(szukaneZasoby);
}
}
}
...
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct | AttributeTargets.Enum | AttributeTargets.Delegate,Inherited = false)]
[ComVisible(true)]
public class Zasob : Attribute
{
public Towar Towar { get; set; }
public Magazyn Magazyn { get; set; }
public Lokalizacja Lokalizacja { get; set; }
public decimal Ilosc { get; set; }
}
現在,每當我嘗試使用方法AddZasoby我得到System.ArgumentOutOfRangeException。我檢查列表中的空值和計數項目,並在調試模式下,它應該退出方法,但仍然以某種方式結束在錯誤的方法的主體。 (請看下面的截圖) 任何想法我做錯了什麼?
我不明白你的代碼....你爲什麼繼承自屬性和使用它像poco類? – Viru
,因爲我從設計器接收到可序列化的錯誤,所以我認爲我應該爲該類添加SerializableAttribute。它幫助了我收到的錯誤。 – mdziadowiec