Kontrolka użytkownika na kilku formularzach

0

Witam, mam zbudowany pewien program w którym korzystam z kilku formularzy. Na każdym z tych formularzy korzystam z takiej samej kontrolki, do której w odpowiedni sposób się odwołuje. Problem polega na tym, że po wprowadzeniu danych do kontrolki chce pobrać te wyniki do następnych obliczeń, ale dostaje wówczas błąd w postaci:
System.NullReferenceException: „Odwołanie do obiektu nie zostało ustawione na wystąpienie obiektu.”

1

bez kodu nikt raczej nie zgadnie :P

0

@WeiXiao: Generalnie jest to długi fragment kodu, więc sam nie wiem co miałbym udostępnić. Pokaże może na początek miejsce w którym jest podświetlany błąd który wypisałem powyżej:

trafo1.Pokaz();

        refTrafo2F.listaElementow.Add(trafo1);                          
        refTrafo3F.listaElementow.Add(trafo1);

Odwołuje się tutaj do danych formularzy, którym chce przypisać dane odczytane z kontrolki.

0

trafo1, refTrafo2F, listaElementow - któreś z tych jest NULLem

albo coś w Pokaz().

0

@WeiXiao: Jeżeli wpisze tylko odwołanie do jednego formularza, to wszystko działa poprawnie. Natomiast przy kilku już nie działa poprawnie i wywala ten błąd.

0

Spróbuj utworzyć nowy projekt i odtworzyć ten scenariusz tzw. MCRE

0

@WeiXiao: Chyba nie do końca rozumiem co miałbym zrobić, moja wiedz chyba nie sięga tak daleko.

0

Zanim zrobisz Add() zrób refTrafo2F.listaElementow = new List<TWOJA_KLASA>(). Próbujesz do listy, która jest NULL dopisać element.

0

@wojtullo:

Chyba nie do końca rozumiem co miałbym zrobić, moja wiedz chyba nie sięga tak daleko.

Napisałeś że

Generalnie jest to długi fragment kodu

więc generalnie chodzi o to, abyś spróbował tu wrzucić kod pomijając te potencjalnie nieistotne fragmenty, ułatwi to nam znalezienie problemu.

0

@AdamWox: Próbowałem zrobić to w taki sposób jak proponowałeś, ale niestety błąd nadal ten sam.

0
AdamWox napisał(a):

Zanim zrobisz Add() zrób refTrafo2F.listaElementow = new List<TWOJA_KLASA>(). Próbujesz do listy, która jest NULL dopisać element.

To nie jest takie proste .Pachnie, jakby kolega miał krzyżową zależność, zwykle początkujacy coś kombinują, albo coś podobnego - jednak uparcie się broni przez ujawnienie tajnego kodu

0

To jest pierwsze co mi do głowy przyszło. Nie wrzucenie kodu i argumentowanie tego, że jest tego dużo świadczy o bałaganie, przez który nie jest w stanie sensownie pokazać problemu. W przypadku list to jest bardzo popularny problem.

public class MojaKlasa
{
   public List<string> MojaLista {get;set;}
}

I teraz w innym miejscu będziesz chciał dodać coś do tej listy

MojaKlasa mk = new MojaKlasa();
mk.MojaLista.Add("NowyWpis"); // <--- System.NullReferenceException: „Odwołanie do obiektu nie zostało ustawione na wystąpienie obiektu.”

Trzeba tą listę stworzyć

public class MojaKlasa
{
   public List<string> MojaLista {get;set;}

   public MojaKlasa()
   {
      MojaLista = new List<string>();
   }
}

Albo

MojaKlasa mk = new MojaKlasa();
mk.MojaList = new List<string>();
mk.MojaLista.Add("NowyWpis");

No i tutaj najważniejszy jest kontekst. Skąd lista, do czego lista, dlaczego jest NULLem. @wojtullo to nie jest wróżbiarskie forum ;-)

0

@AdamWox: Tutaj jest kod mojej kontrolki

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace Projekt1
{
   
    public partial class kontrolka_linia : UserControl
    {
        public Zwarcie3f refZwarcie3F;
                                   
        public Zwarcie2f refZwarcie2F;

        public kontrolka_linia()
        {
            InitializeComponent();
            comboBox1.Items.Add("Cu");
            comboBox1.Items.Add("Al");
            comboBox1.SelectedIndex = 0;
        }



        private void kontrolka_linia_Load(object sender, EventArgs e)
        {

        }

        MaterialZyly wyborMaterialu; 
        

        private void button1_Click(object sender, EventArgs e)
        {

            switch(comboBox1.SelectedIndex)//zależne od wpisanej wartości w Comboboxie
            {
                case 0: wyborMaterialu = MaterialZyly.Cu; 
                    break;
                case 1: wyborMaterialu = MaterialZyly.Al;
                    break;
                default: MessageBox.Show("Wybierz matriał żyły"); 
                    break; //jeżeli nic nie wybierzemy, pojawia się MessageBox
            }

            Linia linia = new Linia(textBoxNazwa.Text, 
                Convert.ToDouble(textBoxdlugosc.Text), 
                Convert.ToDouble(textBoxprzekroj.Text), 
                wyborMaterialu);


            linia.Wyswietl();

            refZwarcie2F.listaElementow.Add(linia); 
                                                 
            refZwarcie3F.listaElementow.Add(linia);

        }

        private void textBoxprzekroj_TextChanged(object sender, EventArgs e)
        {

        }

        private void textBoxdlugosc_TextChanged(object sender, EventArgs e)
        {

        }

        private void textBoxNazwa_TextChanged(object sender, EventArgs e)
        {

        }
    }
}
0

Gdzie tworzysz refZwarcie2F? Gdzie tworzysz refZwarcie3F?
Switch w button1_Click dla case default zawiera błąd logiczny - powinien być return a nie break.

0

@wojtullo:
to nie jest cały kod, to jest partial classs i reszta jest w pliku "designer"

Tym niemniej coś można zgadywać z jakim-takim prawdopodobieństwem
Masz deklaracje

public Zwarcie3f refZwarcie3F;
public Zwarcie2f refZwarcie2F;

a nigdzie nie masz ich zainicjowania (np przez new)
Szczerze mówiąc w tej zgaduj zgaduli tak obstawiałem przypadek null'a , po lewej stronie - odmiennie niż @AdamWox po kropce

0

@ŁF: refZwarcie2F i refZwarcie3F to jest odwołanie właśnie do formularzy na których właśnie korzystam z kontrolki.

0
wojtullo napisał(a):

@ŁF: refZwarcie2F i refZwarcie3F to jest odwołanie właśnie do formularzy na których właśnie korzystam z kontrolki.

Same się nie zainicjują.
Np przez new we właściwym momencie (form onload albo później w jakimś zdarzeniu, gdy jest powód - ale tylko jeden raz)

0

Tutaj tej kod z tego formularza na którym korzystam z kontrolki:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace Projekt1
{
    public partial class Zwarcie3f : Form 
    {
        string[] nazwyElementów = new string[3]
        {"Sieć", "Linia", "Transformator"};
        
        public List<Elementy_systemu_El_En> listaElementow = new List<Elementy_systemu_El_En> { }; 

        public Zwarcie3f() 
        {
            InitializeComponent(); 
            comboBox1.Items.AddRange(nazwyElementów);
        }

        private void Zwarcie3f_Load(object sender, EventArgs e) //funkcja Load - działa w momencie ładowania się danego elementu 
        {
            //MessageBox.Show("Metoda Zwarcie3f_Load");
        }

        int pozycja_kontrolki_x = 150; 

        private void button1_Click(object sender, EventArgs e)
        {
            switch (comboBox1.SelectedIndex) 
            {
                case 0:
                    kontrolka_sieci sieć = new kontrolka_sieci(); 
                    sieć.Location = new Point(pozycja_kontrolki_x, 10); 
                    pozycja_kontrolki_x += 155; 
                    this.Width += 155; 
                    sieć.Parent = this;
                    sieć.refZwarcie3F = this; 
                    break;

                case 1:
                    kontrolka_linia linia = new kontrolka_linia();
                    linia.Location = new Point(pozycja_kontrolki_x, 10);
                    pozycja_kontrolki_x += 155;
                    this.Width += 155;
                    linia.Parent = this;
                    linia.refZwarcie3F = this; 
                    break;

                case 2: 
                    kontrolka_transformator transf = new kontrolka_transformator();
                    transf.Location = new Point(pozycja_kontrolki_x, 10);
                    pozycja_kontrolki_x += 155;
                    this.Width += 155;
                    transf.Parent = this;
                    transf.refZwarcie3f = this; 
                    break;

                default: 
                    MessageBox.Show("Zaznacz jeden z elementów Sieć/Linia/Transformator!!!"); 
                    break; 

            }
        }

        private void button2_Click(object sender, EventArgs e) 
        {
  
            textBox1.Clear();
            foreach (var item in listaElementow)
            {
         
            }

            textBox1.AppendText("Rz= " + Math.Round(Obliczenia.Rezystancja(listaElementow), 10).ToString() + Environment.NewLine));

        }

        private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
        {

        }

        private void button3_Click(object sender, EventArgs e)
        {

        }

        private void textBox1_TextChanged(object sender, EventArgs e)
        {

        }

        private void button4_Click(object sender, EventArgs e)
        {

        }
    }
}
0

@AnyKtokolwiek: Niby tak, ale jeżeli miałem tylko jeden rodzaj zwarcia, jeden formularz to wszystko działało poprawnie. A dopiero w momencie dołożenia kolejnego formularza pojawia się ten błąd.

0

To w takim razie gdzie powinienem zainicjować te elementy?

0

Hej

generalni z tego co widzę chcesz sie odwoływać do zmienne pomiędzy forms'ami.. możesz do tego użyć globalnych zmiennych

https://www.arclab.com/en/kb/csharp/global-variables-fields-functions-static-class.html

0
sight napisał(a):

Hej

generalni z tego co widzę chcesz sie odwoływać do zmienne pomiędzy forms'ami.. możesz do tego użyć globalnych zmiennych

https://www.arclab.com/en/kb/csharp/global-variables-fields-functions-static-class.html

Nie jest to najlepsza rada.

Doceniam - w ramach przekształceń programu - wyniesienie danych, zwłaszcza wspólnych, ale do klasy / klas spełniających mniej lub więcej rolę Model.
Tu problematyczne "dane" to komponenty GUI, nieco zmienia to patrzenie.

0

@wojtullo: Tak są tam takie informacje i co mam z nimi zrobić?

0

Dodam, obie zmienne są public, i to jest do .upy
Idealny antyprzykład, i pokaz dlaczenie NIE używać public.
Mogą być inicjowane gdziekolwiek

Podam jeszcze drugi sposób, moze pomóc.
zmień na jakis czas na private
Jeśli jest, jak mówi szkalna kula, kompilator ci pokaże to miejsce.

0

To chyba jakiś troll... Jeszcze sam sobie zaakceptował własny post.

0

@AnyKtokolwiek: Zauważyłem teraz jeszcze jedno. Faktycznie w momencie uruchomienia programu, jedna zmienna przyjmuje wartość null. W zależności od tego która znajduje się zapisana jako pierwsza, to druga jest wówczas tą wartością null. Zamieniając linijki kodu sytuacja się zmienia, ta która była wartością null już nią nie jest, a jest nią ta która wcześniej nią nie była.

1

Kol. @wojtullo
Mam dośc tej macanki na niepełnych źródłach, bez twojego wkładu.
W miarę oblatany programista by znalazł NPE w 3 minuty, weźmy poprawkę na początkującego, 30 minut pracy z debugerem (jest w VS C# bardzo dorbry).
A wątek wisi już kolejny dzień bez wyniku. Masz na to czas?

jeśli raz masz

Zwarcie2f zwarcie2f = new Zwarcie2f() ;

a gdzie indziej masz

Zwarcie2f zwarcie2;

To są dwie deklaracje dwóch różnych zmiennych (pól).

ja się zegnam.

PS. na Elektrodzie zapewniasz, że robisz #include ... wszystko w porządku?

0

@wojtullo Czy mógłbyś wreszcie załączyć CAŁYIII kod swojego projektu? Gdybyś to zrobił od razu, to dziś miałbyś już rozwiązaną sprawę. A na razie to mamy idiotyczne próby docieczenia, co też takiego udało Ci się spieprzyć.

0

@Sadam2: Dobra tutaj jest kod, z każdego dodanego elementu
Formularz główny:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace Projekt1
{

    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void fazoweToolStripMenuItem_Click(object sender, EventArgs e)
        {
            Zwarcie3f zwarcie3f = new Zwarcie3f(); 
            zwarcie3f.Show(); 
        }

        private void Form1_Load(object sender, EventArgs e)
        {

        }

        private void button1_Click(object sender, EventArgs e)
        {

        }

        private void pictureBox1_Click(object sender, EventArgs e)
        {

        }

        private void pictureBox1_Click_1(object sender, EventArgs e)
        {

        }

        private void textBox1_TextChanged(object sender, EventArgs e)
        {

        }

        private void zwarciaToolStripMenuItem_Click(object sender, EventArgs e)
        {

        }

        private void textBoxRzeczywista1_TextChanged(object sender, EventArgs e)
        {

        }

        private void label13_Click(object sender, EventArgs e)
        {

        }

        private void label17_Click(object sender, EventArgs e)
        {

        }

        private void fazoweToolStripMenuItem1_Click(object sender, EventArgs e)
        {
            Zwarcie2f zwarcie2f = new Zwarcie2f();
            zwarcie2f.Show();
        }

        private void label20_Click(object sender, EventArgs e)
        {

        }
    }
}

Formatka Zwarcie3f

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace Projekt1
{
    public partial class Zwarcie3f : Form 
    {
        string[] nazwyElementów = new string[3] 
        {"Sieć", "Linia", "Transformator"}; 

        public List<Elementy_systemu_El_En> listaElementow = new List<Elementy_systemu_El_En> { }; 

        public Zwarcie3f() 
        {
            InitializeComponent(); 
            comboBox1.Items.AddRange(nazwyElementów); 
        }

        private void Zwarcie3f_Load(object sender, EventArgs e)
        {

        }

        int pozycja_kontrolki_x = 150; 

        private void button1_Click(object sender, EventArgs e)
        {
            switch (comboBox1.SelectedIndex) 
            {
                case 0:
                    kontrolka_sieci sieć = new kontrolka_sieci(); 
                    sieć.Location = new Point(pozycja_kontrolki_x, 10);
                    pozycja_kontrolki_x += 155;
                    this.Width += 155;
                    sieć.Parent = this;
                    sieć.refZwarcie3F = this;
                    break;

                case 1: 
                    kontrolka_linia linia = new kontrolka_linia();
                    linia.Location = new Point(pozycja_kontrolki_x, 10);
                    pozycja_kontrolki_x += 155;
                    this.Width += 155;
                    linia.Parent = this;
                    linia.refZwarcie3F = 
                    break;

                case 2:
                    kontrolka_transformator transf = new kontrolka_transformator();
                    transf.Location = new Point(pozycja_kontrolki_x, 10);
                    pozycja_kontrolki_x += 155;
                    this.Width += 155;
                    transf.Parent = this;
                    transf.refZwarcie3f = this; 
                    break;

                default:
                    MessageBox.Show("Zaznacz jeden z elementów Sieć/Linia/Transformator!!!"); 
                    break;

            }
        }

        private void button2_Click(object sender, EventArgs e) 
        {

            textBox1.Clear();
            foreach (var item in listaElementow)
            {

            }

            textBox1.AppendText("Rz= " + Math.Round(Obliczenia.Rezystancja(listaElementow), 10).ToString() + Environment.NewLine +
                "Xz= " + Math.Round(Obliczenia.Reaktancja(listaElementow), 10).ToString() + Environment.NewLine +
                "Ik''= " + Math.Round(Obliczenia.LiczIkbis(listaElementow), 10).ToString() + Environment.NewLine);
               
        }

        
        private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
        {

        }

        private void button3_Click(object sender, EventArgs e)
        {

        }

        private void textBox1_TextChanged(object sender, EventArgs e)
        {

        }

        private void button4_Click(object sender, EventArgs e)
        {

        }
    }
}

Formatka Zwarcie2f

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace Projekt1
{
    public partial class Zwarcie2f : Form
    {
       string[] nazwyElementów = new string[3]
       {"Sieć", "Linia", "Transformator"}; 
       
        public List<Elementy_systemu_El_En> listaElementow = new List<Elementy_systemu_El_En> { }; 

        public Zwarcie2f() 
        {
            InitializeComponent(); 
            comboBox1.Items.AddRange(nazwyElementów);
        }

        private void Zwarcie2f_Load(object sender, EventArgs e)
        {

        }

        int pozycja_kontrolki_x = 150;

        private void button1_Click(object sender, EventArgs e)
        {
            switch (comboBox1.SelectedIndex) 
            {
                case 0: 
                    kontrolka_sieci sieć = new kontrolka_sieci(); 
                    sieć.Location = new Point(pozycja_kontrolki_x, 10); 
                    pozycja_kontrolki_x += 155; 
                    this.Width += 155; 
                    sieć.Parent = this; 
                    sieć.refZwarcie2F = this;
                    break;

                case 1: 
                    kontrolka_linia linia = new kontrolka_linia();
                    linia.Location = new Point(pozycja_kontrolki_x, 10);
                    pozycja_kontrolki_x += 155;
                    this.Width += 155;
                    linia.Parent = this;
                    linia.refZwarcie2F = this; 
                    break;

                case 2:
                    kontrolka_transformator transf = new kontrolka_transformator();
                    transf.Location = new Point(pozycja_kontrolki_x, 10);
                    pozycja_kontrolki_x += 155;
                    this.Width += 155;
                    transf.Parent = this;
                    transf.refZwarcie2F = this;
                    break;

                default: 
                    MessageBox.Show("Zaznacz jeden z elementów Sieć/Linia/Transformator!!!"); 
                    break;
            }
        }

        private void button2_Click(object sender, EventArgs e)
        {
           
            textBox1.Clear();
            foreach (var item in listaElementow)
            {

            }

            textBox1.AppendText("Rz= " + Math.Round(Obliczenia.Rezystancja(listaElementow), 10).ToString() + Environment.NewLine +
                "Xz= " + Math.Round(Obliczenia.Reaktancja(listaElementow), 10).ToString() + Environment.NewLine +
                "Ik''= " + Math.Round(Obliczenia.LiczIkbis(listaElementow), 10).ToString() + Environment.NewLine);
        }

        private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
        {

        }

        private void button3_Click(object sender, EventArgs e)
        {

        }

        private void textBox1_TextChanged(object sender, EventArgs e)
        {

        }

        private void button4_Click(object sender, EventArgs e)
        {

        }
    }
}

Kontrolka linia


using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace Projekt1
{

    public partial class kontrolka_linia : UserControl
    {

        public Zwarcie3f refZwarcie3F;

        public Zwarcie2f refZwarcie2F;

        public kontrolka_linia()
        {
            InitializeComponent();
            comboBox1.Items.Add("Cu");
            comboBox1.Items.Add("Al");
            comboBox1.SelectedIndex = 0; 
        }

        private void kontrolka_linia_Load(object sender, EventArgs e)
        {

        }

        MaterialZyly wyborMaterialu; 

        private void button1_Click(object sender, EventArgs e)
        {

            switch(comboBox1.SelectedIndex)
            {
                case 0: wyborMaterialu = MaterialZyly.Cu; 
                    break;
                case 1: wyborMaterialu = MaterialZyly.Al;
                    break;
                default: MessageBox.Show("Wybierz matriał żyły"); 
                    break;Box
            }

            Linia linia = new Linia(textBoxNazwa.Text, 
                Convert.ToDouble(textBoxdlugosc.Text), 
                Convert.ToDouble(textBoxprzekroj.Text), 
                wyborMaterialu);

            linia.Wyswietl();

            refZwarcie3F.listaElementow.Add(linia); 
            refZwarcie2F.listaElementow.Add(linia);           
        }

        private void textBoxprzekroj_TextChanged(object sender, EventArgs e)
        {

        }

        private void textBoxdlugosc_TextChanged(object sender, EventArgs e)
        {

        }

        private void textBoxNazwa_TextChanged(object sender, EventArgs e)
        {

        }
    }
}

Klasa elementy systemu elen

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks; //biblioteki funkcji
using System.Windows.Forms; //nowa, dodana funkcja - dla MesseageBoxa
using System.Windows.Forms.DataVisualization.Charting; //dla komponentu chart

namespace Projekt1
{
    public class Elementy_systemu_El_En 
    {

        public string nazwa_elementu; 
        protected double rezystancja_elementu; 
        protected double reaktancja_elementu;
        protected double impedancja_elementu;
        protected double współczynnikm;
        protected double współczynnikn; 
        protected double współczynnikmn;
        protected double współczynnik_m;
        protected double współczynnik_n;
        protected double Współczynnik_mn;

        public double Rezystancja_elementuć 
        {
            get { return rezystancja_elementu; } 

        }

        public double Reaktancja_elementu
        {
            get { return reaktancja_elementu; } 
        }

        public void Wyswietl() 
        {
            MessageBox.Show("Nazwa: " + nazwa_elementu + Environment.NewLine +
            "Rezystancja = " + rezystancja_elementu.ToString() + Environment.NewLine +
            "Reaktancja = " + reaktancja_elementu.ToString());
        }
    }

    class Siec : Elementy_systemu_El_En
    {

        double Un, Sk;
       
        public Siec(string nazwa, double napiecie, double moc)
        {
            nazwa_elementu = nazwa; 
            Un = napiecie;
            Sk = moc;
            impedancja_elementu = (1.1 * Math.Pow(Un, 2) / (Math.Sqrt(3) * Sk));
            reaktancja_elementu = 0.995 * impedancja_elementu;
            rezystancja_elementu = 0.1 * reaktancja_elementu;
        }
    }


    class Transformator : Elementy_systemu_El_En
    {
        double Ud, Ug, Uz, deltaPcu, St;

        public Transformator(string nazwa, double napiecieUd, double napiecieUg, double napiecieUz,
            double stratydPcu, double moc) 
        {
            nazwa_elementu = nazwa; 
            Ud = napiecieUd;
            Ug = napiecieUg;
            Uz = napiecieUz;
            deltaPcu = stratydPcu;
            St = moc;

            impedancja_elementu = (Uz * Math.Pow(Ud, 2)) / (100 * St);
            rezystancja_elementu = (deltaPcu * Math.Pow(Ud, 2)) / (100 * St);
            reaktancja_elementu = Math.Sqrt(Math.Pow(impedancja_elementu, 2) - Math.Pow(rezystancja_elementu, 2));
        }
    }

    enum MaterialZyly { Cu = 58, Al = 34 } 

    class Linia : Elementy_systemu_El_En
    {
        double l;   
        double s; 
        double y; 

        public Linia(string nazwa, double dlugosc, double poleprzekroju, MaterialZyly material) 
        {
            nazwa_elementu = nazwa; j
            l = dlugosc;
            s = poleprzekroju;
            y = (int)material;  
            rezystancja_elementu = l / (y * s);
            reaktancja_elementu = 0.1153 * Math.Pow(s, -0.084);
        }
    }

    class Obliczenia
    {
        public static double Rezystancja(List<Elementy_systemu_El_En> pLista) 
        {
            double R = 0; 
            foreach (var item in pLista)
            {
                R += item.Rezystancja_elementu; 
            }
            return R; 
        }

        public static double Reaktancja(List<Elementy_systemu_El_En> pLista) 
        {
            double X = 0;

            foreach (var item in pLista)
            {
                X += item.Reaktancja_elementu;
            }
            return X;
        }

        public static double LiczIkbis(List<Elementy_systemu_El_En> pLista)
        {
            return 1.1 * 400 /
                (Math.Sqrt(3) * Math.Sqrt(Math.Pow(Rezystancja(pLista), 2) + Math.Pow(Reaktancja(pLista), 2)));
        }
        }

    }
    
}
0

teraz widzę, skąd wywlokłeś manierę DZIEDZICZENIA listy? Nawet skopiowanie wzrou z dokumentacji jest trudne?

public List<Elementy_systemu_El_En> listaElementow = new List<Elementy_systemu_El_En> { }; 

Na public w takim miejscu mój żołądek protestuje. Miłego szukania efektów ubocznych

Ogólnie zmienna lokalna, pole, traktujesz bardzo swobodnie. To jedna z przyczyn kłopotów.
Zachowania się lokalnych elementów GUI nawet nie umiem sobie wyobrazić.

1 użytkowników online, w tym zalogowanych: 0, gości: 1