День добрый! Мучаюсь который день, может подскажите?
В основной Форме есть функция
public void MessageReader(string Name)
{ .... }
И в UserControl:
private void UsersBox_Click(object sender, EventArgs e)
{
//MessageReader("Name"); - так вызвать метод не получается.
}
Искал в Google, но пока ответа не нашел... Как правильно?
Спасибо!
В UserControl
-e:
public Form1 ParentForm { get; set; }
private void UsersBox_Click(object sender, EventArgs e)
{
if (ParentForm != null)
ParentForm.MessageReader("Name");
}
В форме:
userControl.ParentForm = this;
Правильно будет так:
private void UsersBox_Click(object sender, EventArgs e)
{
if(this.Parent is NeededForm)//подставьте тип своей формы с методом
{
((NeededForm)this.Parent).MessageReader("Name");
}
}
или даже короче, если используете C#6
private void UsersBox_Click(object sender, EventArgs e)
{
(this.Parent as NeededForm)?.MessageReader("Name");
}
В WinForms каждый контрол по умолчанию имеет ссылку на родительский контейнер. Исключением являются только формы, и то не всегда. Родитель вписывается автоматически, при добавлении одного контрола в коллекцию дочерних другого контрола. Работает и наоборот, вы можете указать родителя, и контрол автоматически будет помещен в коллекцию дочерних контролов родителя.
В коде выше все просто, проверяем что родитель нужного нам типа и вызываем метод, в противном случае ничего не делаем, ведь не у каждой формы есть описанный вами метод. Разумеется ваш контрол должен размещаться прямо на форме, без промежуточных панелей, таблиц и прочих контейнеров.
Если нужны промежуточные контейнеры, то либо вариант из соседнего ответа, либо меняем архитектуру на более гибкую и менее капризную.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Задумал написать игру (простой PacMan)Сделал Grid сетку 30x30 присвоил нажатию клавиш (стрелочек) методы для перемещения картинки Pacman по гриду: как...