[ Полезный рекламный блок ]
Попробуйте свои силы в игре, где ваши навыки программирования на C# станут решающим фактором. Переходите по ссылке 🔰.
В этой статье мы рассмотрим как осуществить переход на другую форму в таких приложениях как Windows Forms и Windows Presentation Foundation.
Windows Forms
Чтобы перейти к другой форме в C# Windows Forms, выполните следующие действия:
- Создайте новую форму, на которую вы хотите перейти.
- В текущей форме создайте экземпляр новой формы.
- Вызовите метод Show() для экземпляра новой формы, чтобы отобразить ее.
- По желанию вы можете скрыть текущую форму, вызвав метод Hide().
Ниже приведен пример кода, демонстрирующий этот процесс:
1 2 3 4 5 6 |
// Create an instance of the new form Form2 form2 = new Form2(); // Show the new form and hide the current form form2.Show(); this.Hide(); |
По завершению работы с другой формой, вы можете ее закрыть с помощью метода Close():
1 2 3 4 |
private void CloseBtn_Click(object sender, EventArgs e) { this.Close(); } |
Так же у вас может возникнуть вопрос, как потом отобразить изначальную форму, после закрытия второй. Первый вариант, заключается в передаче объекта основной формы через конструктор второй, соответственно при закрытии второй формы, можно обратиться к объекту первой и вызывать метод Show(). Рассмотрим пример:
Form1.cs:
1 2 3 4 5 6 7 |
// Create an instance of the new form // Using the this keyword, pass the current form Form2 form2 = new Form2(this); // Show the new form and hide the current form form2.Show(); this.Hide(); |
Form2.cs:
1 2 3 4 5 6 7 8 9 10 |
Form1 form; public Form2(Form1 form) { this.form = form; } private void CloseBtn_Click(object sender, EventArgs e) { this.Close(); form.Show(); } |
При нажатии на кнопку CloseBtn, текущая форма будет закрыта, а вызывающая открыта.
Второй вариант, заключается в использовании коллекции открытых форм приложения:
1 2 3 4 5 6 |
private void CloseBtn_Click(object sender, EventArgs e) { Form form = Application.OpenForms[0]; form.Show(); this.Close(); } |
Учитываем координаты форм при открытии
Представьте ситуацию. Открыта Form1 вы ее перемещаете в правый верхний угол экрана. Потом нажимаете на кнопку и… Form2 открывается по центру экрана или в другом месте, но не в том месте, где была Form1. Многие улыбнуться и скажут, что в свойствах Form2 надо прописать/указать следующее «StartPosition -> CenterParent» и открывать Form2.
Это правильное решение, которое всегда будет открывать Form2 поверх Form1 и всегда по центру Form1. Однако этот код не применим, если вам надо скрывать Form1, так как Form1 не будет скрываться.
Сейчас приведу полное решение, которое позволит открывать Form1 и Form2 в той же точке, где находилась до этого форма, вызывающая другую форму. Код включает всё вышеописанное. В свойствах форм надо прописать следующее (прямо в студии выбираете эти значения):
- свойство Form1: «StartPosition -> CenterScreen»
- свойство Form2: «StartPosition -> Manual»
Form1.cs:
1 2 3 4 5 6 7 8 |
private void OpenFormBtn_Click(object sender, EventArgs e) { Form2 form2 = new Form2(); form2.Left = this.Left; form2.Top = this.Top; form2.Show(); this.Hide(); } |
Form2.cs:
1 2 3 4 5 6 7 8 |
private void CloseBtn_Click(object sender, EventArgs e) { Form form = Application.OpenForms[0]; form.Left = this.Left; form.Top = this.Top; form.Show(); this.Close(); } |
В Form2, так же можно дописать еще одну строку, на случай если пример не работает:
1 |
form.StartPosition = FormStartPosition.Manual; |
WPF
В WPF можно перейти к другой форме с помощью элемента Frame и его метода Navigate. Вот пример того, как это сделать:
- Создайте новое окно WPF (Window2 в данном примере), в которое вы хотите перейти.
- В первом окне добавьте элемент Frame в код XAML, где вы хотите отобразить новое окно.
- В code-behind первого окна создайте обработчик события для щелчка по кнопке или любого другого события, которое вызовет навигацию.
- В обработчике событий вызовите метод Navigate элемента Frame и передайте Uri нового окна, к которому вы хотите перейти.
1 2 3 |
// navigate to a new page var nextPage = new MyPage(); NavigationService.Navigate(nextPage); |
Другим способом перехода к другой форме является показ нового окна. Для этого можно создать новый экземпляр окна, которое вы хотите показать, и вызвать его метод Show. Вот пример:
1 2 3 |
// show a new window var newWindow = new MyWindow(); newWindow.Show(); |
Если у вас есть элемент управления-контейнер, например ContentControl или Frame, вы можете изменить его содержимое, чтобы показать новую страницу или элемент управления пользователя. Для этого вы можете установить свойство Content элемента управления контейнером на новый экземпляр страницы или элемента управления пользователя, который вы хотите показать.
Вот пример:
1 2 3 |
// show a new page in a content control var newPage = new MyPage(); myContentControl.Content = newPage; |
Это лишь несколько способов сделать переход к другой форме в WPF C#. Лучший подход зависит от конкретных требований вашего приложения.
Я надеюсь, что вам понравилось читать эту статью, и она оказалась легкой для понимания. Пожалуйста, дайте мне знать, если у вас есть какие-либо комментарии или исправления.
Так же вам может быть интересна предыдущая статья — Как сделать get запрос.
Вы хотите научится писать код на языке программирования C#?
Создавать различные информационные системы, состоящие из сайтов, мобильных клиентов, десктопных приложений, телеграмм-ботов и т.д.
Переходите к нам на страницу Dijix и ознакомьтесь с условиями обучения, мы специализируемся только на индивидуальных занятиях, как для начинающих, так и для более продвинутых программистов. Вы можете взять как одно занятие для проработки интересующего Вас вопроса, так и несколько, для более плотной работы. Благодаря личному кабинету, каждый студент повысит качество своего обучения, в вашем распоряжении:
- Доступ к пройденному материалу
- Тематические статьи
- Библиотека книг
- Онлайн тестирование
- Общение в закрытых группах
Живи в своем мире, программируй в нашем.