Класс возвращает null в другую форму C#
Метод класса недоступен, а обходной вариант через функцию возвращает null массиву correlation в вызывающей форме.
Класс создаю в Program.cs, а после в форме 1 создаю глобально экземпляры, которые успешно передают/принимают значения (.
public class __Correlation
{
public double[] Get_array { get; set; }
}
К сути: В другой форме нужно получить значения конкретного экземпляра, поэтому обращаюсь к нему. Если обращаюсь к данным таким образом, то компилятор ругается "Form1.k_X недоступен из за уровня защиты".
public void Form2_Load(object sender, EventArgs e)
{
Form1 f = new Form1();
double[] correlation = f.k_X.Get_array; //вызов метода класса
...
}
Сделал функцию в форме 1, которая принимает значения экземпляра, а потом уже возвращает их вызывающей форме и в итоге получаю null.
public double[] correlation_X()//функция которая якобы обходной вариант
{
double[] array = k_X.Get_array;
return array;
}
Куда копать? Может быть это из-за того, что экземпляры объявлены в одной форме, а используются в другой?
Ответы (1 шт):
У вас тут ошибка:
public void Form2_Load(object sender, EventArgs e)
{
Form1 f = new Form1(); //<-- вот тут
double[] correlation = f.k_X.Get_array; //вызов метода класса
...
}
Переделайте класс Form2 следующим образом:
class Form2 : Form
{
Form1 form1 = null;
public Form2(Form1 form1)
{
this.form1 = form1;
}
public void somecalc() //пример рабочей функции
{
var val = form1.****; //читаем нужные нам public свойства из Form1
//тут считаем
form1.* = val2; //пишем нужные нам public свойства в Form1
}
}
Вся суть заключается в передаче "себя" (Form1) в дочернюю форму, чтобы была ссылка на форму для доступа в public свойства.
Соответственно когда в Form1 при каком-то действии вы создаёте Form2, в этот Form2 вы должны передать существующий экземпляр Form1:
class Form1 : Form
{
void CallForm2()
{
Form2 form2 = new Form2(this); //this - это существующий экземпляр Form1
form2.Show();
}
}