1

Тема: C#, WindowsForm, VisualStudio. Робота з UserControl.

Маю таку проблему:
Я не знаю, як зробити певні зміни на основній Form(для прикладу візьмемо Form1) з UserControl(для прикладу візьмемо UserControl1).

Моя Form1 містить у собі UserControl1. UserControl1 містить кнопку, при натисканні якої повинні статися зміни на Form1.

Приведу конкретно свій приклад:
На Form1 у мене міститься UserControlSignIn1 типу UserControlSignIn і UserControlSignedIn1 типу UserControlSignedIn. UserControlSignedIn1 приховано, і він знаходиться на задньому плані.
UserControlSignIn1 містить кнопку ButSignIn("Увійти").

При натисканні кнопки ButSignIn треба:
1. Сховати UserControlSignIn1(UserControlSignIn1.Hide();)
2. Показати UserControlSignedIn1(UserControlSignedIn1.Show();)
3. Розмістити його на передньому плані(UserControlSignedIn1.BringToFront();)

Проблема в тому, що я не знаю, як мені отримати доступ з UserControlSignedIn до UserControlSignIn1 та UserControlSignedIn1:(

2

Re: C#, WindowsForm, VisualStudio. Робота з UserControl.

Рішення вже знайшов.

Просто при ініціалізації в формі UserControlSignIn1 передаю в конструктор саму форму.

Також змінив рівень захисту UserControlSignIn1 і UserControlSignedIn1 з private на public.

Потім просто при натисканні кнопки я міняв параметри UserControlSignIn1 і UserControlSignedIn1.
*DANCE*

3

Re: C#, WindowsForm, VisualStudio. Робота з UserControl.

Щось тут не те

4 Востаннє редагувалося Wolf.dp (04.09.2024 21:53:45)

Re: C#, WindowsForm, VisualStudio. Робота з UserControl.

Запізно, але може хтось наткнеться. Підхід з передачею в контрол форми -- поганий. Так ви залізобетонно визначаєте залежність контрола від форми, хоча весь сенс контрола -- бути окремим незалежним модулем.

Тому більше правильне рішення таке:
- винести якийсь івент назовні контрола. Насправді можна прям івент самої кнопки прокинути
- в формі виконуємо підписку на натискання кнопки

Другий варіант -- через передачу делегата для зворотнього виклику. Це теж залишає контрол незалежним, але менш зручно в використані.