Как обновить форму из другой формы? - PullRequest
1 голос
/ 17 октября 2011

У меня есть две формы - form1 и form2. Я вызываю form2 из form1, используя приведенный ниже фрагмент кода:

Application.run(new Form2());

Form2 f2=new Form2();

f2.show();

Этот код работает абсолютно нормально, и я мог видеть загрузку form2 из form1.

Теперь мне нужно повторить это, скажем, 5 раз. Когда я запускаю его в первый раз, должен быть создан новый istance (то есть приведенный выше код должен выполняться), но когда я запускаю его во 2-й, 3-й или 4-й раз, мне нужно обновить форму 2 вместо создания новой формы 2. Когда я запускаю приведенный выше код 5 раз, создаются 5 новых экземпляров form2. Вместо этого form2 должен отображаться только один раз, но он должен обновляться, когда я звоню в любое другое время, кроме первой формы. Не могли бы вы пролить свет на это?

Ответы [ 2 ]

4 голосов
/ 17 октября 2011

вы можете попробовать вот так ....

обратите внимание, что это только элементарная реализация шаблона Mediator.Я настоятельно рекомендую вам прочитать об этом шаблоне и шаблонах проектирования в целом, чтобы лучше понять, что происходит.

Опять же, это пример, но в нем есть некоторая основная ошибкапроверка и вы должны начать.

Объявление вашей формы будет выглядеть примерно так:

public partial class MainForm : Form
{
    private FormMediator _formMediator;

    public MainForm()
    {
        InitializeComponent();
    }

    public void SomeMethodThatOpensTheSubForm()
    {
        SubForm subForm = new SubForm();

        _formMediator = new FormMediator(this, subForm);

        subForm.Show(this);
    }
}

И измененная реализация Посредника будет выглядеть так:

public class FormMediator
{
    private Form _subForm;
    private Form _mainForm;

    public FormMediator(Form mainForm, Form subForm)
    {
        if (mainForm == null)
            throw new ArgumentNullException("mainForm");

        if (subForm == null)
            throw new ArgumentNullException("subForm");

        _mainForm = mainForm;
        _subForm = subForm;

        _subForm.FormClosed += MainForm_FormClosed;
    }

    void MainForm_FormClosed(object sender, FormClosedEventArgs e)
    {
        try
        {
            _mainForm.Refresh();
        }
        catch(NullReferenceException ex)
        {
            throw new InvalidOperationException("Unable to close the Main Form because the FormMediator no longer has a reference to it.", ex);
        }
    }
}

Надеюсь, это поможет вам ....

4 голосов
/ 17 октября 2011

.Когда я запускаю приведенный выше код 5 раз, создаются 5 новых экземпляров form2.Вместо этого форма 2 должна отображаться только один раз, но она должна обновляться, когда я звоню в любое другое время, кроме первой формы.

Это потому, что вы создаете ее 5 раз:

 Form2 f2=new Form2();

Это создаст новую форму.Если вы вызовете его 5 раз, это создаст 5 экземпляров формы.

Если вы хотите обновить данные, вам нужно создать открытый метод «Refresh ()» и вызвать его.Например:

f2.Refresh();

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...