Вызов второго экземпляра формы из первой формы.Но при возврате к первой форме экземпляр второй формы не закрывается - PullRequest
0 голосов
/ 11 декабря 2018

Я звоню во второй экземпляр формы нажатием кнопки из первой формы.Во второй форме есть исключение SqlException, которое выдает ошибку, если имя пользователя и пароль из первой формы неверны.Если SqlException находит ошибку, он закрывает вторую форму и открывает обратно первую форму.Проблема заключается в том, что вторая форма остается в памяти, и если пользователь вводит неправильное имя пользователя и пароль 100 раз, 100 экземпляров второй формы останутся в памяти, и использование памяти будет только накапливаться.У меня также есть кнопка во второй форме, которая возвращает вас в первую форму, и я думаю, что то же самое происходит и там.

Мой код для переключения между формами:

       //first form called FormLogin

        public FormLogin()
        {
            InitializeComponent();     
        }

        private void button1_Click(object sender, EventArgs e)
            {
                this.Hide();
                var nextForm = new Form1();
                nextForm.ShowDialog();
                nextForm.Activate();
                nextForm.Show();
            }

        //SqlException in the second form called Form1 

        public Form1()
        {
            InitializeComponent();
        }

         catch (SqlException ex)
                   {
                    //MessageBox.Show(ex.Message);
                    //var backtologin = new FormLogin();
                    //backtologin.Show();
                    //backtologin.Activate();
                    this.Hide();
                    MessageBox.Show(ex.Message,"Incorrect password, or missing permission!");
                    FormLogin login = new FormLogin();

                    login.ShowDialog();
                    login.Activate();

                    this.Close();
                }

    //second form button for going back to the first form
    private void logout_Click(object sender, EventArgs e)
            {
                this.Hide();
                FormLogin login2 = new FormLogin();
                login2.ShowDialog();
                login2.Activate();
                this.Close();
            }

Ответы [ 2 ]

0 голосов
/ 11 декабря 2018

При отображении формы с ShowDialog() вы должны использовать using предложение

using(FormLogin login2 = new FormLogin())
{
    login2.ShowDialog();
}

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

0 голосов
/ 11 декабря 2018

Вот как вы должны вызывать свой второй экземпляр формы:

private void button1_Click(object sender, EventArgs e)
{
    this.Hide();
    var nextForm = new Form1();
    nextForm.FormClosing += (s,e) => {
        nextForm.Dispose(); // not always needed, but calling it doesn't hurt. It ensures the "nextForm" variable gets disposed, acts just like "using" statement.
        this.Show();
    };
    try{
        nextForm.Show();
    }
    catch(Exception e){
        //manage your exception here
    }


}

В этом случае не используйте ShowDialog, так как вы можете рассматривать эти две формы как две разные "вещи".

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