自定义控件在一个项目中引用多个,修改其中一个的某个属性时,其他所有的引用的这个属性也跟着一起变化
[Category("2、颜色集合"), Description("设置颜色及其对应文本")]
[DesignerSerializationVisibility(DesignerSerializationVisibility.Content), MergableProperty(false)]
public ObservableCollection<MyColorItems> ColorDatas
{
get{ return myColorItems; }
set
{
ObservableCollection<MyColorItems> listt = value;
myColorItems.Clear();
foreach (var ii in listt)
{
myColorItems.Add(ii);
}
}
}
[Serializable]
public class MyColorItems
{
[Description("对应文本"), Browsable(true)]
public string Name { get; set; }
[Description("颜色"), Browsable(true)]
public Color myColor { get; set; }
public MyColorItems() { }
public MyColorItems(string name, Color cc)
{
Name = name;
myColor = cc;
}
}
这个属性在Collection Changed事件中监听修改
单个只用一个的话能够正常使用,用多个的话只有这个属性会一起变,其他属性正常
难道不对吗?
控件 是对象,自然是传递引用的
你应该在需要的地方都实例化一个,而不是传来传去
private static MyColorItems color1 = new MyColorItems("color1", Color.LightGreen);
private static MyColorItems color2 = new MyColorItems("color2", Color.Blue);
private static MyColorItems color3 = new MyColorItems("color3", Color.Red);
private static MyColorItems color4 = new MyColorItems("color4", Color.Gray);
private static List<MyColorItems> listt = new List<MyColorItems>() { color1, color2, color3, color4 };
private static List<MyColorItems> listt1 = new List<MyColorItems>() { color1, color2, color3 };
private void button1_Click(object sender, EventArgs e)
{
StatusS.Status11 sts1 = new StatusS.Status11();
sts1.ColorDatas = new ObservableCollection<MyColorItems>(listt);
sts1.Row = 4;
sts1.Column = 5;
sts1.Location = new Point(0, 0);
sts1.Size = new Size(200, 200);
this.Controls.Add(sts1);
}
private void button2_Click(object sender, EventArgs e)
{
StatusS.Status11 sts2 = new StatusS.Status11();
sts2.ColorDatas = new ObservableCollection<MyColorItems>(listt1);
sts2.Row = 3;
sts2.Column = 4;
sts2.Location = new Point(400, 0);
sts2.Size = new Size(200, 200);
this.Controls.Add(sts2);
}
这样也不行,添加第一个之后,再添加第二个然后第一个颜色集合就变成跟第二个一样了