В изучении C# столкнулся с проблемой неведомой мне ранее, вопрос наверно смешной и элементарный но меня ставит в тупик, на 47 странице гугла я таки сдался искать.
Есть класс MainForm в котором есть публичный метод public void goToDir(string path) {....};
Есть другой класс в отдельном файле Progress, при попытке вызвать метод путём — MainForm.GoToDirectory(dest), получаю что «Для нестатического поля, метода или свойства „WApplication.MainForm.GoToDirectory(string)“
Что делать?
class Progress
{
...
Form OwnerForm;
public Progress(Form ownerForm)
{
...
this.OwnerForm = ownerForm;
}
...
void CallGoToDirectory(string path)
{
OwnerForm.GoToDirectory(path);
}
}
При создании экземпляра Progress из MainForm пишите new Progress(this).
OwnerForm — ссылка на экземпляр формы, метод которого вызывается из экземпляра Progress.
Вы не можете вызвать нестатические методы имеют отношение только к конкретному экземпляру класса. Для того, чтобы вызвать их извне, необходимо иметь ссылку на этот экземпляр. Для того, чтобы иметь возможность вызывать метод, зная только имя класса, метод объявляется статическим (ключевое слово static) — при этом метод не сможет использовать нестатические методы и поля класса.
дак это мне вот так что ли надо написать?
public partial class Progress : Form
{
Form OwnerForm;
public Progress(Form ownerForm)
{
this.OwnerForm = ownerForm;
InitializeComponent();
}
void CallGoToDirectory(string path)
{
OwnerForm.GoToDirectory(path);
}
все равно никак кстати.
да GoToDirectory использует внутри себя методы MainForm и визуальные объекты.
Компилятор при это выдает — «WApplication.Progress» не содержит определения для «OwnerForm» и не был найден метод расширения «OwnerForm», принимающий тип «FileManager.Progress» в качестве первого аргумента (возможно, пропущена директива using или ссылка на сборку)"
Это я понимаю, про связку эту что нужно указывать ссылку я не знал. думал будет достаточно что метод публичный и указать путь до него включая класс. Но ошибся.