Выполнение асинхронных задач в Python с asyncio
py-thonny 12.05.2025
Современный мир программирования похож на оживлённый мегаполис – тысячи процессов одновременно требуют внимания, ресурсов и времени. В этих джунглях операций возникают ситуации, когда программа. . .
Работа с gRPC сервисами на C#
UnmanagedCoder 12.05.2025
gRPC (Google Remote Procedure Call) — открытый высокопроизводительный RPC-фреймворк, изначально разработанный компанией Google. Он отличается от традиционых REST-сервисов как минимум тем, что. . .
CQRS (Command Query Responsibility Segregation) на Java
Javaican 12.05.2025
CQRS — Command Query Responsibility Segregation, или разделение ответственности команд и запросов. Суть этого архитектурного паттерна проста: операции чтения данных (запросы) отделяются от операций. . .
Шаблоны и приёмы реализации DDD на C#
stackOverflow 12.05.2025
Когда я впервые погрузился в мир Domain-Driven Design, мне показалось, что это очередная модная методология, которая скоро канет в лету. Однако годы практики убедили меня в обратном. DDD — не просто. . .
Исследование рантаймов контейнеров Docker, containerd и rkt
Mr. Docker 11.05.2025
Когда мы говорим о контейнерных рантаймах, мы обсуждаем программные компоненты, отвечающие за исполнение контейнеризованных приложений. Это тот слой, который берет образ контейнера и превращает его в. . .
Micronaut и GraalVM — будущее микросервисов на Java?
Javaican 11.05.2025
Облачные вычисления безжалостно обнажили ахиллесову пяту Java — прожорливость к ресурсам и медлительный старт приложений. Традиционные фреймворки, годами радовавшие корпоративных разработчиков своей. . .
Инфраструктура как код на C#
stackOverflow 11.05.2025
IaC — это управление и развертывание инфраструктуры через машиночитаемые файлы определений, а не через физическую настройку оборудования или интерактивные инструменты. Представьте: все ваши серверы,. . .
Инъекция зависимостей в ASP.NET Core — Практический подход
UnmanagedCoder 11.05.2025
Инъекция зависимостей (Dependency Injection, DI) — это техника программирования, которая кардинально меняет подход к управлению зависимостями в приложениях. Представьте модульный дом, где каждая. . .
Битва за скорость: может ли Java догнать Rust и C++?
Javaican 11.05.2025
Java, с её мантрой «напиши один раз, запускай где угодно», десятилетиями остаётся в тени своих «быстрых» собратьев, когда речь заходит о сырой вычислительной мощи. Rust и C++ традиционно занимают. . .
Упрощение разработки облачной инфраструктуры с Golang
golander 11.05.2025
Причины популярности Go в облачной инфраструктуре просты и одновременно глубоки. Прежде всего — поразительная конкурентность, реализованная через горутины, которые дешевле традиционных потоков в. . .
There is a common and simple requirement in windows applications to Open a new form(say Form2) when clicked a button in Form1 and also close Form1 at the same time.
Table of Contents
- On Button Click Open Form 2 and Close Form 1
- 1) Close Form1 and Show Form2 – C#
- 2) Use Application.Run for each form in Main() method
- 3) Hide Form1 and Show Form2 – C#
- Summary
On Button Click Open Form 2 and Close Form 1
There are many ways you can close current form and open a new form in .NET.See below,
1) Close Form1 and Show Form2 – C#
private void btnLogin_Click(object sender, EventArgs e)
{
this.Close(); //Close Form1,the current open form.
Form2 frm2 = new Form2();
frm2.Show(); // Launch Form2,the new form.
}
2) Use Application.Run for each form in Main() method
//Declare a boolean property.This property to be set as true on button click.
public bool IsLoggedIn { get; set; }
private void btnLogin_Click(object sender, EventArgs e)
{
this.Close(); //Close Form1
/* Set the property to true while closing Form1.This propert will be checked
before running Form2 in Main method.*/
IsLoggedIN = true;
}
Then Update the Main() method as below.
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Form1 frm1 = new Form1();
Application.Run(frm1);
/*Here the property IsLoggedIn is used to ensure that Form2 won't be shown when user closes Form1 using X button or a Cancel button inside Form1.*/
if (frm1.IsLoggedIn)
{
Application.Run(new Form2());
}
}
3) Hide Form1 and Show Form2 – C#
Here Form1 will remain open as long as the application is live.This option is the worst and hence not at all suggested.
private void btnLogin_Click(object sender, EventArgs e)
{
this.Hide(); //Hide Form1.
Form2 frm2 = new Form2();
frm2.Show(); // Launch Form2
}
Summary
In this post we have seen samples to close Form1 and open Form2 in C# and same code logic can be used in VB.NET. Hope these code snippets has helped you to rectify the issues during close one form and open another form in C# or VB.NET. Leave your comments in the comment section below.
Related Items :
Close one form and Open another form On Button click,
Open new Form but Closing current Form,
vb.net close form from another form,
How to close form1 and open form2 in VB.NET,
Application.run to close a form and open another form
Reader Interactions
Trackbacks
Добавление форм. Взаимодействие между формами
Последнее обновление: 31.10.2015
Чтобы добавить еще одну форму в проект, нажмем на имя проекта в окне Solution Explorer (Обозреватель решений) правой кнопкой мыши и выберем
Add(Добавить)->Windows Form…
Дадим новой форме какое-нибудь имя, например, Form2.cs:
Итак, у нас в проект была добавлена вторая форма. Теперь попробуем осуществить взаимодействие между двумя формами. Допустим, первая форма
по нажатию на кнопку будет вызывать вторую форму. Во-первых, добавим на первую форму Form1 кнопку и двойным щелчком по кнопке перейдем в файл кода. Итак,
мы попадем в обработчик события нажатия кнопки, который создается по умолчанию после двойного щелчка по кнопке:
private void button1_Click(object sender, EventArgs e) { }
Теперь добавим в него код вызова второй формы. У нас вторая форма называется Form2, поэтому сначала мы создаем объект данного класса, а потом для его
отображения на экране вызываем метод Show:
private void button1_Click(object sender, EventArgs e) { Form2 newForm = new Form2(); newForm.Show(); }
Теперь сделаем наоборот — чтобы вторая форма воздействовала на первую. Пока вторая форма не знает о существовании первой. Чтобы это исправить, надо
второй форме как-то передать сведения о первой форме. Для этого воспользуемся передачей ссылки на форму в конструкторе.
Итак перейдем ко второй форме и перейдем к ее коду — нажмем правой кнопкой мыши на форму и выберем View Code (Просмотр кода). Пока он пустой и
содержит только конструктор. Поскольку C# поддерживает перегрузку методов, то мы можем создать несколько методов и конструкторов с разными
параметрами и в зависимости от ситуации вызывать один из них. Итак, изменим файл кода второй формы на следующий:
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace HelloApp { public partial class Form2 : Form { public Form2() { InitializeComponent(); } public Form2(Form1 f) { InitializeComponent(); f.BackColor = Color.Yellow; } } }
Фактически мы только добавили здесь новый конструктор public Form2(Form1 f)
, в котором мы получаем первую форму и устанавливаем ее фон
в желтый цвет. Теперь перейдем к коду первой формы, где мы вызывали вторую форму и изменим его на следующий:
private void button1_Click(object sender, EventArgs e) { Form2 newForm = new Form2(this); newForm.Show(); }
Поскольку в данном случае ключевое слово this представляет ссылку на текущий объект — объект Form1, то при создании второй формы она будет получать ее (ссылку)
и через нее управлять первой формой.
Теперь после нажатия на кнопку у нас будет создана вторая форма, которая сразу изменит цвет первой формы.
Мы можем также создавать объекты и текущей формы:
private void button1_Click(object sender, EventArgs e) { Form1 newForm1 = new Form1(); newForm1.Show(); Form2 newForm2 = new Form2(newForm1); newForm2.Show(); }
При работе с несколькими формами надо учитывать, что одна из них является главной — которая запускается первой в файле Program.cs.
Если у нас одновременно открыта куча форм, то при закрытии главной закрывается все приложение и вместе с ним все остальные формы.
Here I will explain how to open a second from using a first form in Windows Forms. Before that I will explain group boxes and picture boxes in Windows Forms.
Step 1: Login form
There is a login from when I enter a password and username and then the page goes directly to another page named form2.
Step 2: Add a new form
Now go to Solution Explorer and select your project and right-click on it and select a new Windows Forms form and provide the name for it as form2.
And the new form is:
Step 3: Coding
Now click the submit button and write the code.
- using System;
- using System.Collections.Generic;
- using System.ComponentModel;
- using System.Data;
- using System.Drawing;
- using System.Text;
- using System.Windows.Forms;
- using System.Data.SqlClient;
- namespace First_Csharp_app
- {
- public partial class Form1 : Form
- {
- public Form1()
- {
- InitializeComponent();
- }
- private void button1_Click(object sender, EventArgs e)
- {
- try
- {
- if (!(usertxt.Text == string.Empty))
- {
- if (!(passtxt.Text == string.Empty))
- {
- String str = «server=MUNESH-PC;database=windowapp;UID=sa;password=123»;
- String query = «select * from data where username = ‘» + usertxt.Text + «‘and password = ‘» + this.passtxt.Text + «‘»;
- SqlConnection con = new SqlConnection(str);
- SqlCommand cmd = new SqlCommand(query, con);
- SqlDataReader dbr;
- con.Open();
- dbr = cmd.ExecuteReader();
- int count = 0;
- while (dbr.Read())
- {
- count = count + 1;
- }
- if (count == 1)
- {
- this.hide();
- Form2 f2 = new form2();
- f2.ShowDialog();
- }
- else if (count > 1)
- {
- MessageBox.Show(«Duplicate username and password», «login page»);
- }
- else
- {
- MessageBox.Show(» username and password incorrect», «login page»);
- }
- }
- else
- {
- MessageBox.Show(» password empty», «login page»);
- }
- }
- else
- {
- MessageBox.Show(» username empty», «login page»);
- }
- }
- catch (Exception es)
- {
- MessageBox.Show(es.Message);
- }
- }
- }
- }
Step 4: Output
When you click on the submit button a new form will be opened named form2.
Завершающим штрихом нашей программы станет реализация перехода между окнами в приложении. При регистрации или авторизации пользователь будет переходить на новые окна, что будет свидетельствовать про успешную обработку его действий.
Видеоурок
Для перехода между страницами необходимо выполнять две задачи:
- скрывать окно в котором сейчас находитесь;
- открывать новое окно приложения.
Ниже приведен код для реализации подобного функицонала:
this.Hide(); // Скрываем нынешнее окно
// Создаем объект на основе определенного окан
MainForm mainForm = new MainForm();
// Показываем новое окно
mainForm.Show();
Программа обучения
Если вас интересует более углубленное изучение самого языка и его фреймворков, то предлагаем вашему внимаю наш полный курс по изучению C#. За курс вы изучите язык C#, научитесь делать веб проекты на основе ASP NET и строить приложения при помощи WinForms и WPF.
Материалы для курса
Чтобы скачивать материалы к видеокурсам необходимо оформить подписку на сайт
Большое задание по курсу
Вам необходимо оформить подписку на сайте, чтобы иметь доступ ко всем большим заданиям. В задание входит методика решения, а также готовый проект с ответом к заданию.
PS: подобные задания доступны при подписке от 1 месяца
Также стоит посмотреть
Изучение языка C# для начинающих
26 уроков
Разработка 2D игры на C# WinForms
8 уроков
Изучение ASP.NET Core MVC. Создание сайтов на C#
10 уроков
Изучение C# WPF на практике. Создание программ на C#
10 уроков
Создание C# WPF игры / Разработка игры с дизайном
6 уроков
Изучение C# и создание Windows программ