Как перейти к двум отдельным формам окон без создания нового экземпляра для формы - PullRequest
0 голосов
/ 11 сентября 2011

Я пытаюсь сделать вот что:

  1. Я установил две формы окон. Я добавил кнопку в обоих и текстовое поле в форме 1 (чтобы проверить сохраненное состояние)
  2. Я продолжаю вводить текст в поле ввода
  3. Теперь, когда я нажимаю кнопку в форме 1, она прячется и показывает форму 2
  4. Мне нужно сейчас вернуться в форму1, нажав кнопку в форме2, и я не могу создать новый объект в форме2, так как это даст мне новый экземпляр, и текст в texbox будет потерян.

Итак, как мне добиться перемещения туда-сюда в формах окон C # и сохранения состояния.

Ответы [ 5 ]

1 голос
/ 11 сентября 2011

Если вы просто вызываете form1.Hide (), ваши данные в текстовом поле сохраняются до тех пор, пока вы не отобразите их снова. Проблема связана с тем, как вы скрываете свою форму1.

0 голосов
/ 12 сентября 2011

В форме 1: В классе:

Form2 frm2=new Form2();

И кнопка:

private void button1_Click(object sender, EventArgs e)
{
    Hide();
    frm2.ShowDialog();
    Show();
}

В форме 2, кнопка:

private void button1_Click(object sender, EventArgs e)
{
    Hide();
}
0 голосов
/ 11 сентября 2011

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

Другими словами, просто используйте переменные, чтобы сохранить ссылки на сами формы, а затем держитесь за них даже после возврата ShowDialog (при условии, что вы хотите показать их модально).

Пример кода:

    private SampleForm m_oSamp1;
    private SampleForm m_oSamp2;

    private void SampleParentFunction()
    {

        if (m_bShowForm1)
        {
            m_oSamp1.ShowDialog();
            m_bShowForm1 = false;
        }
        else
        {
            m_oSamp2.ShowDialog();
            m_bShowForm1 = true;
        }

    }

Данные в отдельных формах на 100% независимы и сохраняются, если вы сделаете это следующим образом.

0 голосов
/ 11 сентября 2011

Объявите в вашем Form2 ктор, как это:

public class Form2 
{
    private Form form1 = null; 

    public Form2(Form1 frm1) 
    {
        form1 = frm1;
    }   

}

Таким образом, вы передаете и сохраняете Form1 объект в Form2 объект. Как только Form2 заканчивается, он может использовать form1 экземпляр Form1, чтобы показать его.

0 голосов
/ 11 сентября 2011

Ситуация, которую вы описываете, включает использование Binding и отделение модели (данных) от представления с использованием шаблона проектирования MVC.

Рекомендую прочитать о шаблоне MVC и функции Binding в WinForms.

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