winforms - указать форму, чтобы клонировать - PullRequest
0 голосов
/ 16 октября 2011

В классе моей программы:

Application.Run(new Form1());

в классе Form1 у меня есть:

model = new Model(this);

    private void userEnteredText()
 {
       Model clonedModel = (Model)model.Clone();
       this.myButton.Size = new System.Drawing.Size(10,5);
       MessageBox.Show("buttons made small");
       this = clonedModel;
      MessageBox.Show("clone complete and buttons restored to orig size");
}

в модельном классе у меня:

    public Model(Form1 form1)
    {
        myform = form1;
    }

public object Clone()
{
   return new Model(myform);
}

Мой начальный объект form1 имеет очень большой размер кнопок. После того, как пользователь вводит значение в текстовое поле: я клонирую объект модели и вызываю метод, который делает кнопки действительно маленькими. Как я могу установить объект модели так, чтобы он указывал на исходный объект модели большими кнопками?

Я получаю эту ошибку: «Невозможно назначить это, потому что это только для чтения»

Я знаю, что могу просто изменить размер кнопки, но мне нужно клонировать весь объект, потому что есть другие исходные переменные, которые я хочу сбросить.

1 Ответ

1 голос
/ 16 октября 2011

Один вопрос - ожидается ли поведение, когда обе модели клонов ссылаются на один и тот же Form? Метод Clone() просто создает новый экземпляр Model, но он все еще ссылается на тот же объект Form,

Вы можете сохранить состояние исходной модели в другом закрытом поле, например

private Model backupModel;

и перед применением пользовательских значений просто сделайте резервную копию, а затем восстановите текущую модель, например:

 private void userEnteredText()
 {
       this.backupModel = model;     
       Model clonedModel = (Model)model.Clone();
       this.myButton.Size = new System.Drawing.Size(10,5);
       MessageBox.Show("buttons made small");
       model = this.backupModel;     
       MessageBox.Show("clone complete and buttons restored to orig size");
 }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...