Есть форма FormData и форма FormResult.
На первой есть textBox и Button.Обе формы в одном namespace. На первой форме у кнопки есть обработчик:
private void resButtonClick(object sender, EventArgs e)
{
string path = textBox.Text;
FormResult res = new FormResult();
res.Show();
}
В namespace есть класс DataClass для обработки .xml файла, содержащий метод, принимающий путь из textBox. Этот метод мы вызываем для заполнения таблици на форме FormResult(метод читает данные из файла и по ним строит DataGridView):
DataClass class = new DataClass();
BindingList<Row> data = new BindingList<Row>();
foreach (Row row in class.MakeRows(path))
{
data.Add(row);
}
При вызове метода происходит ошибка: Ошибка CS0103: Имя "path" отсутствует в текущем контексте.
Обработчик private, а значит путь не виден другой форме. Решил попробовать вместо path использовать textBox.Text, но для этого что надо создать конструктор формы (FormResult) и передать ему ссылку на первую форму, используя this? Может и не так, но я попробовал.
Можно попробовать передать параметр через конструктор.
В FormResult сделать так:
private string _path;
. . .
public FormResult(string path)
{
. . . // какой-то стандартный код из шаблона.
this._path = path;
}
В FormData:
string path = textBox.Text;
FormResult res = new FormResult(path);
res.Show();
Но, вообще это не совсем удачный вариант. На будущее, лучше задействовать паттерны наподобие MVP или MVVM. Но, для простой программки сойдёт.
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости