![](/img/trans.png)
[英]How to color items in listBox in different colors? getting exception : Items collection cannot be modified when the DataSource property is set
[英]How to set DefaultValueAttribute on List<Color> collection property (set default colors)?
因此,當我嘗試設置DefaultValueAttribute時,我為自定義控件聲明了List集合屬性,它不會編譯並顯示錯誤:
屬性參數必須是屬性參數類型的常量表達式,typeof表達式或數組創建表達式
..我在做什么錯?
private List<Color> _gradientColorList = new List<Color>();
[CategoryAttribute("Appearance")]
[DefaultValueAttribute(new List<Color>(new Color[] { Color.FromArgb(116, 194, 225), Color.FromArgb(1, 145, 200), Color.FromArgb(0, 91, 154) }))]
public List<Color> GradientColorList
{
get
{
return _gradientColorList;
}
set
{
try
{
if (value == null)
throw new ArgumentNullException();
if (value == null || value.Count < 2)
throw new Exception("Gradient color list count is less than 2.");
_gradientColorList = value;
CreateGradientList(GradientColorList);
Invalidate();
}
catch (Exception exc)
{
ExcMessageBox(exc);
}
}
}
還有一個問題,當我在Visual Studio屬性編輯器(顏色集合編輯器)中從GradientColorList集合屬性中添加或刪除顏色時,包含try-catch的set塊不起作用,我也不知道為什么? 如何解決?
代替使用DefaultValueAttribute,您可以將gradientColorList分配為
private List<Color> _gradientColorList = new List<Color>(new List<Color>(new Color[] { Color.FromArgb(116, 194, 225), Color.FromArgb(1, 145, 200), Color.FromArgb(0, 91, 154) }));
對於第二部分,無論何時在列表中添加或刪除實體,都不會調用設置器。 僅在將值分配給“ GradientColorList”時才會調用它。 如果將其綁定到UI,則最好使用ObserverableCollection,當添加或刪除實體時,它會內部觸發集合更改事件。
正如編譯器告訴您的那樣:您不能使用List<>
作為屬性的參數來創建。 您提供給屬性的所有參數必須恆定。 這意味着它們不應更改。 雖然陣列滿足此條件,但您無法動態添加或刪除項目的動態列表。 嘗試用列表創建常量,它將不起作用:
const List<Color> COLORS = new List<Color>();
如果要提供默認值,我認為可以使用以下3個選項:
將_gradientColorList
設置為默認值:
private _gradientColorList = new List<Color>(new Color[] { Color.FromArgb(116, 194, 225), Color.FromArgb(1, 145, 200), Color.FromArgb(0, 91, 154) }));
將您的get函數更改為以下內容:
if (_gradientColorList == null) { return new List<Color>(new Color[] { Color.FromArgb(116, 194, 225), Color.FromArgb(1, 145, 200), Color.FromArgb(0, 91, 154) })); } return _gradientColorList;
使用數組而不是列表
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.