Member 13054113 Ответов: 1

Как закрыть или скрыть форму в C# ?


У меня есть 3 формы. Первая форма 1, содержащая кнопку с именем Login. А Логин - это форма после того, как вы нажали кнопку в форме 1. Теперь, когда я нажал кнопку Ок, я хочу, чтобы Form1 и Login закрылись и перешли непосредственно к последней форме, которая является главной страницей. Но когда я попробовал, это не сработало. Вот код:


private void button1_Click(object sender, EventArgs e)
        {
            SqlConnection con = new SqlConnection(@"Data Source=.\SQLEXPRESS;AttachDbFilename=H:\WindowsFormsApplication1\WindowsFormsApplication1\AmericanGirls.mdf;Integrated Security=True;User Instance=True");
            SqlDataAdapter sda = new SqlDataAdapter("Select Count (*) From Table1 where Username='" + textBox1.Text + "' and Password='" + textBox2.Text + "'", con);
            DataTable dt = new DataTable();
            sda.Fill(dt);
            if (dt.Rows[0][0].ToString() == "1")
            {
                MessageBox.Show("Welcome");
                this.Hide();
                Form1 se= new Form1();
                se.Close();
                MainPage ss = new MainPage();
                ss.Show();
 
            }
            else
            {
                MessageBox.Show("Merlin's Beard! Are You Kidding Me? -_-");
            }
        }


Возможно, я забыл что-то поставить или мой код просто очень неправильный. Я все еще новичок в Visual Studio и C#, поэтому действительно не знаю, что делать. пожалуйста помочь

Что я уже пробовал:

Я попробовал форму кодов. закрыть и скрыть также видимость . Но это все равно не сработало.

[no name]

Что значит "не сработало"? Почему вы создаете экземпляр новой Формы1, а затем сразу же закрываете ее?

1 Ответов

Рейтинг:
10

OriginalGriff

Проблема вот в чем:

Form1 se= new Form1();
se.Close();

Это закрывает новый экземпляр формы, который не совпадает с тем, который вы видите - вам нужно получить правильный.
Это сложно, потому что я предполагаю, что код, который вы показываете, находится в форме входа в систему, и он вообще не знает об экземпляре Form1. "Правильный" способ сделать это - заставить форму входа сообщить Form1, что она вошла в систему, и она должна закрыться-что на самом деле нетрудно сделать, но как именно это сделать, зависит от того, что вы использовали для отображения формы входа в первую очередь.

1) Если вы использовали ShowDialog, то все просто: вызовите Close в форме входа, когда вы нажмете кнопку, и код будет продолжаться в форме Form1 после вызова ShowDialog. Затем Form1 может скрыть или закрыть себя и вместо этого отобразить главную страницу.

2) Если вы использовали Show, то это тоже довольно просто - это просто звучит сложно. Все, что вам нужно сделать, это создать событие в вашей форме входа, которое обрабатывается в форме 1 и которое делает все, как описано в (1) выше. Это действительно легко сделать: Передача информации между двумя формами, Часть 2: Ребенок-Родитель[^] покажет вам, как.

Вероятно, вы хотите скрыть Form1, а не закрыть его - потому что если Form1 является формой запуска, то закрытие его закрывает приложение, так что вы вообще никогда не увидите MainPage! Но если вы это сделаете, то вам нужно будет справиться с главной страницей.FormClosed event и close Form1 или приложение никогда не выйдет (но пользователь никогда не сможет его увидеть!)

И сделай себе пару одолжений:
1) Никогда не объединяйте строки для построения SQL-команды. Это оставляет вас широко открытыми для случайной или преднамеренной атаки SQL-инъекции, которая может уничтожить всю вашу базу данных. Вместо этого используйте параметризованные запросы.
2) Никогда не храните пароли в открытом тексте - это серьезная угроза безопасности. Здесь есть некоторая информация о том, как это сделать: Хранение паролей: как это сделать.[^]
3) перестаньте использовать имена Visual Studio по умолчанию для всего - вы можете помнить, что" TextBox8 " - это номер мобильного телефона сегодня, но когда вам нужно будет изменить его через три недели, вы это сделаете? Используйте описательные имена - например, "tbMobileNo" - и ваш код станет легче читать, более самодокументируемым, более легким в обслуживании-и на удивление быстрее кодировать, потому что Intellisense может добраться до" tbMobile "за три нажатия клавиш, где" TextBox8 " занимает размышление и 8 нажатий клавиш...