Я новичок в формах окон C#, и я пытаюсь создать графический интерфейс с двумя панелями. Левая панель используется для отображения динамически добавленных пользовательских элементов управления, содержащих кнопки. Правая панель используется для отображения динамически добавленных пользовательских элементов управления, которые содержат другие элементы управления: текстовые поля, метки, выпадающие списки, кнопки и т. Д.Добавить/удалить панель управления, нажав кнопку на динамически добавленном usercontrol
Я создал форму 1 с двумя панелями. Я могу успешно загрузить обе панели с другим контентом UserControl.cs, используя меню, которое я добавил в начало формы. Когда я нажимаю параметр меню, form1 buttonPanel загружается соответствующим содержимым buttonPanel.cs и form1 mainPanel загружается соответствующим содержимым mainPanel.cs. Однако, когда я нажимаю кнопку, которая существует на buttonPanel.cs, я не могу получить form1 mainPanel, чтобы изменить ее содержимое.
ie: WelcomeMenu.cs имеет кнопку btnPage2, которая должна менять элементы управления mainPanel, чтобы показать пользовательское управление Page2.cs вместо функции Welcome.cs usercontrol.
Я хочу, чтобы иметь возможность использовать в кнопке обработчик щелчка на UserControl.cs:
mainPanel.Controls.Clear();
UserControl usrCtl = new UserControl();
Form1.mainPanel.Controls.Add(usrCtl);
Моя проблема, кажется, что WelcomeMenu.cs не может видеть или получить доступ Form1 mainPanel.
Есть ли способ сделать эту работу? Или я пытаюсь сделать это неправильно?
Моя причина для этого метода заключается в том, что я могу загрузить новую команду buttonPanel.cs usercontrol и mainPanel.cs usercontrol для каждого отдела, а затем иметь возможность изменять содержимое mainPanel для каждой кнопки, которую я нажимаю в текущей кнопкеPanel. Я пытаюсь избежать создания группы панелей на Form1, а затем скрывать их и делать их видимыми только тогда, когда они мне нужны.
Обновление: buttonMenu.cs
{
{
public partial class ucWelcomeMenu : UserControl
public ucWelcomeMenu()
{
InitializeComponent();
}
private void btnPage2_Click(object sender, EventArgs e)
{
Form1.mainPanel.Controls.Clear();
ucWelcome frm = new ucWelcome();
Form1.mainPanel.Controls.Add(frm);
}
}
}
Form1.mainPanel.Controls.Add (FRM) генерирует ошибку на Form1.mainPanel, что гласит: «An ссылка объекта требуется для нестатического поля, метода или свойства 'Form1.mainPanel'
ОБНОВЛЕНИЕ 2:
Ok. Я искал несколько разных ссылок и нашел полезную информацию. Тем не менее, я все еще не могу запустить событие из нажатия кнопки в динамически добавленном UserControl.cs. У меня 2 панели на Form1. menuPanel и mainPanel. Оба они установлены в Modifiers = Public.
Вот мой Form1:
namespace TestUserControl
public partial class Form1 : Form
{
private ucWelcomeMenu welc = new ucWelcomeMenu();
public Form1()
{
InitializeComponent();
ucWelcomeMenu welcomeMenu = new ucWelcomeMenu();
menuPanel.Controls.Add(welcomeMenu);
welc.ButtonClick += new EventHandler(this.CustomEvent_Handler);
}
private void CustomEvent_Handler(object sender, EventArgs e)
{
MessageBox.Show("Yes");
}
}
}
И вот мой UserControl:
namespace TestUserControl.UserControls
public partial class ucWelcomeMenu : UserControl
{
public event EventHandler ButtonClick;
public ucWelcomeMenu()
{
InitializeComponent();
}
private void btnPage2_Click(object sender, EventArgs e)
{
if (ButtonClick != null)
ButtonClick(sender, e);
}
}
}
Пользователь UserControl имеет свойство, называемое 'ParentForm'. Попробуйте использовать это вместо «Form1», что является неприемлемой ссылкой. Передайте его Form1. Не самая лучшая установка. Ваш UserControl действительно должен просто поднять событие и позволить форме заботиться об этом бизнесе. Кроме того, элементы управления очисткой не утилизируют их. Вы должны избавиться от них, когда закончите. – LarsTech
@LarsTech - это правильно. Я пропустил эту часть. Тем не менее, mainPanel все еще требует установки в Public для его модификатора для других UserControls, чтобы иметь возможность ссылаться на него. –
Это похоже на то, что мне нужно. Не знаете, как рассказать о моем вопросе поиска. Можете ли вы рассказать мне, что я должен искать, чтобы найти несколько примеров того, как позволить событию обрабатывать этот тип проблемы? –