Мой класс программы имеет:
Application.Run(new Form1());
в классе form1 У меня есть:
model = new Model(this);
modelarray myArray = new modelarray(this);
model = myArray.models[0];
myArray.models[1] = (Model) model.Clone();
private void btn13_Click(object sender, EventArgs e)
{
model.btn13Clicked();
}
private void btnGetBackClone_Click(object sender, EventArgs e)
{
model = myArray.models[1];
//here I'm expecting to get the original object back (ie. with btns[7,7].Visible = True) but it doesn't work!!
}
в классе модели У меня есть:
private Button[,] btns;
public Model(Form1 form1)
{
btns = new Button[10,10];
myform = form1;
btns[8, 6] = form1.btn1;
btns[9, 5] = form1.btn2;
btns[7, 7] = form1.btn13;
}
public void btn13Clicked()
{
btns[7, 7].Visible = False;
}
public object Clone()
{
return this.MemberwiseClone();
}
в классе modelarrayУ меня есть:
public Model[] models = new Model[19];
public modelarray(Form1 form1)
{
models[0] = new Model(form1);
}
Обратите внимание на мой комментарий в методе btnGetBackClone_Click."// здесь я ожидаю получить исходный объект (т.е. с помощью btns [7,7] .Visible = True), но он не работает !!"
Я понимаю, что это потому, чтомодели [0] и модели [1] указывают на одну и ту же ячейку памяти (т. е. копирование по ссылке).Но я действительно теряюсь в том, как реализовать решение в этой ситуации.Поиски по «глубокому копированию», похоже, не помогли, так как сериализация формы не сработала.Может кто-нибудь исправить мою ошибку клонирования?
Я знаю, что мог бы просто повторить "btns [7, 7] .Visible = True;"но я хотел бы узнать решение для клонирования, чтобы оно скопировало все будущие поля, которые я решил добавить в свою модель.
У меня был поиск по codeproject.etc, но, похоже, ничего простоговведение в winforms.