[ Полезный рекламный блок ]
Попробуйте свои силы в игре, где ваши навыки программирования на C# станут решающим фактором. Переходите по ссылке 🔰.
У цій статті ми розглянемо як здійснити перехід на іншу форму в таких додатках, як Windows Forms і Windows Presentation Foundation.
Щоб перейти до іншої форми в 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(); |
Так само у вас може виникнути питання, як потім відобразити початкову форму, після закриття другої. Перший варіант полягає в передачі об’єкта основної форми через конструктор другої, відповідно під час закриття другої форми можна звернутися до об’єкта першої і викликати метод 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 і ознайомтеся з умовами навчання, ми спеціалізуємося тільки на індивідуальних заняттях, як для початківців, так і для просунутих програмістів. Ви можете взяти як одне заняття для опрацювання питання, що вас цікавить, так і кілька, для більш щільної роботи. Завдяки особистому кабінету, кожен студент підвищить якість свого навчання, у вашому розпорядженні:
- Доступ до пройденого матеріалу
- Тематичні статті
- Бібліотека книг
- Онлайн тестування
- Спілкування в закритих групах