System.NullReferenceException: Object reference not set to a

0

Mam klasę bazową. W jej polach znajdują się tablice dwóch innych klas :

public DockingForms.DockingPanel[] DockingPanelForm = new DockingForms.DockingPanel[100];
public DockingForms.TargetFunctionGraph[] TargetFunctionGraphForm = new DockingForms.TargetFunctionGraph[100]

Po wciśnięciu przycisku, w formatce powinna się utworzyć para powyższych obiektów. Kod poniżej przedstawia utworzenie tych obiektów :

        private void wykresFunkcjiCeluToolStripMenuItem_Click(object sender, EventArgs e)
        {
            int index = counter;
            
            TargetFunctionGraphForm[index] = new DockingForms.TargetFunctionGraph("Target" + index);
            DockingPanelForm[index] = new DockingForms.DockingPanel("pTarget" + index);

            TargetCollection.Add("Target" + index,  TargetFunctionGraphForm[index]);
            DockingPanelCollection.Add("pTarget" + index, DockingPanelForm[index]);
            
            TargetCollection["Target" + index].Show(dockMain);

            TargetCollection["Target" + index].DockState = WeifenLuo.WinFormsUI.Docking.DockState.Document;
            TargetCollection["Target" + index].DockAreas = WeifenLuo.WinFormsUI.Docking.DockAreas.Float | WeifenLuo.WinFormsUI.Docking.DockAreas.Document;

            TargetCollection["Target" + index].OnRightClickGraph += new Neurony.DockingForms.RightClickGraphDelegate(TargetPanelChangeDirector);
            TargetCollection["Target" + index].OnPropertiesShow += new Neurony.DockingForms.PropertiesShowDelegate(TargetGraphProperties);

            TargetCollection["Target" + index].ShowProperties();

            counter++;
        }

counter - licznik globalny objektów - działa poprawnie
konstruktor dla TargetCollection oraz TargetFunctionGraphForm zmienia wartość pola typu "string" - nie ma błędów

Niestety dla poniższej linii kodu wystąpił wyjątek :
System.NullReferenceException: Object reference not set to an instance of an object.

  TargetFunctionGraphForm[index] = new DockingForms.TargetFunctionGraph("Target" + index);

Ciekawe jest to, że sprawdziłem również :

  DockingPanelForm[index] = new DockingForms.DockingPanel("pTarget" + index);

I teoretycznie powinien wyskoczyć ten sam wyjątek, jednak ta linijka przechodzi bez problemu.

Ktoś może się z czymś takim spotkał, i wie w czym może być problem ?

1

TargetFunctionGraphForm[index]

najwidoczniej TargetFunctionGraphForm == null, czyli nie został zainicjowany.

dodaj gdzieś przed tą funkcją TargetFunctionGraphForm = new DockingForms.TargetFunctionGraph[5], a jeszcze lepiej zastanów się czemu ten obiekt nie został zainicjowany.

0

Niestety ten wyjątek wyskakuje niezależnie od tego, czy objekt został zainicjowany. Przepraszam za wprowadzenie w błąd, ale dwie pierwsze linijki są wynikiem moich eksperymentów i modyfikacji. Zmodyfikuje je do prawidłowej postaci, i ponawiam pytanie :)

public DockingForms.DockingPanel[] DockingPanelForm = new DockingForms.DockingPanel[100];
public DockingForms.TargetFunctionGraph[] TargetFunctionGraphForm = new DockingForms.TargetFunctionGraph[100]
0

VS zna taka magiczna sztuczke jak debugger
odpal w trybie debug, postaw pulapki (breakpoint) i zobaczysz z ktorej linijki leci exception i ktory obiekt jest null

1

Tylko że to niemożliwe :] Sprawdź sobie w debbugerze na przykład - wstawiasz breakpointa na linii TargetFunctionGraphForm[index] =... i sprawdzasz wartości pól. Debugowanie się przydaje podczas programowania. ewentualnie wstaw konstruktor na linijkę przed wywołaniem.

(W tej linijce wyjątek może wywalić jeszcze tylko konstruktor albo 'index', ale to bez sensu totalnie ;) )

0

W trybie Debug nie musi nawet stawiać BreakPoint'ów - samo się zatrzyma i pokaże co / gdzie.

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