Как обратиться к методу класса Form из другого класса?

Есть одна единственная форма, и в классе этой формы описан не статический метод. Дело в том, что для обращения к этому методу из другого класса нужен объект класса Form. Так вот, где его взять? При попытке создать новый вылетает исключение о переполнении стека. Как быть?
  • Вопрос задан
  • 4521 просмотр
Решения вопроса 1
@tex0
Управляет данными на форме и содержит алгоритмическую часть решения


тогда примерно так

class Form1 : Form
{
    public Form()
    {
        // конструируем форму
        AnothertypeObject  = new AnotherType(this); // создаем объект контроллера в нужном нам месте. 
        //По умолчанию создаю в конструкторе формы
    }

    public AnotherType AnothertypeObject {get; private set;}
    // остальной код
}

public interface IFormController
{
    void DoSomething();
}

class AnotherType : IFormController
{
    private Form host_;
    public AnotherType(Form host)
    {
        host_ = host;
    }
   
    public void DoSomething()
    {
        // вызываем нужный метод объекта host_
    }
    // другая логика
}


решение топорное, но для примера думаю сойдёт.
Ответ написан
Пригласить эксперта
Ответы на вопрос 3
@pvlunegov
используйте Делегаты. Читайте подробнее про них например, тут

или например, вот тут более человеческим языком все описано.

По сути вы с помощью делегата создаете ссылку на метод в любом месте и контексте.
Даже на метод класса формы.
оформляете событие, опубликовываете событие.
В нужном месте получаете подписку на событие, реакцию на событие получаете с помощью делегата.

Таким образом ваш вопрос полностью будет разрешен
Ответ написан
yarosroman
@yarosroman Куратор тега C#
C# the best
Если метод не использует нестатические члены класса, то может стоит объявить его static, или в конструкторе другого класса сделать параметр, который будет передавать указатель на форму.
Ответ написан
Necronel
@Necronel
За что отвечает метод и из какой части требуется его вызвать?
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы