Есть форма 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. Но, для простой программки сойдёт.
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости