Avatar billede noobsaibot Nybegynder
20. april 2005 - 22:24 Der er 29 kommentarer og
1 løsning

En klasse der skal ændre TreeView properties

Jeg har lavet en klasse, som skal ændre egenskaben visible til true for et treeview. Jeg får bare en fejl:

"An unhandled exception of type 'System.NullReferenceException' occurred in Blah.exe

Additional information: Object reference not set to an instance of an object."

gul pil foran: frm.treeView1.Visible = true;





-------------
using System;

namespace Blah
{
    /// <summary>
    /// Summary description for ShowTreeView.
    /// </summary>
   
        public class ShowTreeView
    {
        private FMain frm;


        public void showtreeview()
        {
            //
            // TODO: Add constructor logic here
            //
            frm.treeView1.Visible = true;
        }
    }
}
Avatar billede nielle Nybegynder
20. april 2005 - 22:35 #1
Det lader ikke til at du har sat frm.treeView1 til noget. Ergo har den stadig værdien null.
Avatar billede noobsaibot Nybegynder
20. april 2005 - 22:36 #2
Ja jeg skal instatisere den, men hvor og hvordan?
Avatar billede softspot Forsker
20. april 2005 - 22:36 #3
Er frm.treeView1 skrevet nøjagtigt som du skriver den eller er det rent faktisk frm.TreeView1? Husk at C# er case sensitive...
Avatar billede noobsaibot Nybegynder
20. april 2005 - 22:37 #4
softspot: Nej den er god nok .. :)
Avatar billede nielle Nybegynder
20. april 2005 - 22:37 #5
Det skal du vel gøre i constructoren for FMain klassen.
Avatar billede nielle Nybegynder
20. april 2005 - 22:38 #6
Hvorfor har du fortsat tråden her i stedet for at blive ved i:

http://www.eksperten.dk/spm/611456
Avatar billede noobsaibot Nybegynder
20. april 2005 - 22:41 #7
Fordi det andet blev for uforståeligt til sidst. Plus jeg gerne vil give flere point for at blive færdig?
Avatar billede nielle Nybegynder
20. april 2005 - 22:42 #8
Linjen:

private FMain frm;

laver en lokal variabel. Den bliver imidlertid aldrig sat til at være noget. Den er m.a.o. null.

private FMain frm = new FMain();
Avatar billede nielle Nybegynder
20. april 2005 - 22:42 #9
Det er imod Ekspertens regelsæt at du opretter flere tråde på det samme spørgsmål.
Avatar billede nielle Nybegynder
20. april 2005 - 22:43 #10
Og i øvrigt kan du altid tildele flere points til et spørgsmål.
Avatar billede noobsaibot Nybegynder
20. april 2005 - 22:45 #11
Nu er den anden tråd jo også lukket.

Når jeg sætter private FMain frm = new FMain();
sker der ikke noget når jeg kalder metoden: showtreeview()
Avatar billede nielle Nybegynder
20. april 2005 - 22:52 #12
Der er jo faktisk heller ikke noget indhold i dit treeView1. Så der er intet at vise.
Avatar billede noobsaibot Nybegynder
20. april 2005 - 22:53 #13
Jojo, den ligger på formen FMain.
Avatar billede nielle Nybegynder
20. april 2005 - 22:55 #14
Ja, men den eksistere skam (ellers ville du have fået null-exeption igen), men den har jo bare ikke noget indhold.
Avatar billede noobsaibot Nybegynder
20. april 2005 - 22:58 #15
Jeg tror jeg skal have "refreshed" formen FMain for at den viser treeview efter ændringen - kan det passe?
Avatar billede burningice Nybegynder
21. april 2005 - 07:27 #16
*ryster på hovedet*

1) nielle> det nytter jo ikke noget at oprette en NY (!!!) instans, når at det er en EKSISTERENDE (!!!) instans vi skal have fat i
2) hvad var det i en den gamle tråd du ikke forstod. Hvis det var hvad jeg skrev i 20/04-2005 21:09:41, så bliver det ikke nemt, for den er absolut den simpleste løsning på dit problem.
Avatar billede nielle Nybegynder
21. april 2005 - 08:33 #17
cyberfessor> Nu er det jo altså ikke mig som har anbefalet at oprette en ny instans. Jeg forholder mig blot til problemstillingen som den er formuleret her, oj her er problemet at frm aldig vlev sat til noget - deraf null-exeption. Enten skal frm initialiseres her eller også skal den tildeles en værdi udefra.
Avatar billede burningice Nybegynder
21. april 2005 - 09:06 #18
du opretter ellers en ny instans af FMain her: 20/04-2005 22:42:04
Avatar billede nielle Nybegynder
21. april 2005 - 09:37 #19
cyberfessor> Som jeg sagde, er der to muligheder for at løse problemet med null-exception. Enten at (1) initialisere frm inde fra ShowTreeView (det jeg har vist 20/04-2005 22:42:04) eller at (2) oprette en instans af FMain andetsteds og tildele frm en reference til denne instans. Af spørgsmålet fremgår det på ingen måde om der overhovedet allerede eksisterer en FMain instans på det pågældende tidspunkt, og derfor er der ikke rigtigt noget grundlag for at sige hvilken løsningsmodel som er den rigtige i den givne situation.

noobsaibot> Du bliver nok nødt til at vise os alt det kode du har. Der mangler simpelthen alt for meget information til at vi kan give dig et ordentligt svar.
Avatar billede burningice Nybegynder
21. april 2005 - 11:45 #20
ja, du har ret... jeg havde den unfair fordel at vide hvad problemstillingen går ud på, da noobsaibot har en anden tråd med selvsamme problem.
Avatar billede noobsaibot Nybegynder
24. april 2005 - 22:01 #21
Ja .. Problemet er nok at jeg ikke har nævnt noget om at jeg bruger MDI. Det er jo nok en lidt vigtig information.. Sorry!
Avatar billede burningice Nybegynder
25. april 2005 - 19:14 #22
det ændrer stadigvæk ikke at jeg har postet løsningen til dig i den anden tråd.

Den form du opretter skal have en reference til den form der oprettede den. Det har den ikke automatisk, så det er den funktionalitet du selv skal lave.

Der er tre ord i denne sammenhæng der skal slås fast

En type, en instans og en variabel.

En type kan være en klasse, men det er altså kun en slags opskrift til hvordan den fungerer. På samme måde som du ikke kan spise en opskrift, men bliver nødt til at lave maden først, udfra opskriften, på samme måde skal du have en instans af klassen før du kan lave noget med den. Variablen er så en slags skål dukan komme maden ned i hvis du har brug for at gemme den til senere.

Når du starter dit program bliver der oprettet en instans af en klasse som repræsenterer et vindue. Samtidig med bliver der oprettet en instans af en TreeView og gemt i en variabel, et såkaldt field, da denne variabel er synlig overalt i klassen. Men når du så opretter en instans af en anden klasse som repræsenterer et andet vindue, så har denne vindue ikke adgang til dit TreeView, eller formen hvor TreeView'et ligger i. Den ved simpelthen ikke hvor i hukommelsen den ligger, eller hvor i køkkenet du har gemt skålen med maden.
Ja, din form2 kender udemærket opskriften til at lave en form1, men det nytter ikke noget når vi skal have fat i den skål mad der ER lavet.
Du bliver altså nødt til fortælle form2 når du opretter den, hvor at form1 ligger henne. For når form2 ved det, så kan den gøre med den som den har lyst.


Ja, en lang smøre men håber at lidt at pædagogik kan kaste noget lys over sagen.
Avatar billede noobsaibot Nybegynder
26. april 2005 - 00:41 #23
Cyberfessor - tak for hjælpen. Jeg har løst problemet på en anden måde, men smid et svar alligevel :)
Avatar billede burningice Nybegynder
26. april 2005 - 08:45 #24
well then... hvad endte din løsning med at være?
Avatar billede noobsaibot Nybegynder
26. april 2005 - 08:56 #25
using System;
using System.Windows.Forms;

namespace Blah
{
    /// <summary>
    /// Summary description for Properties.
    /// </summary>

    public class Properties
    {
        public void LogOnAdmProperties(Form frm)
        {
          ((FMain)frm).treeView1.Visible = true;
                }
        }
Avatar billede burningice Nybegynder
26. april 2005 - 09:05 #26
:)

men er du så ikke ude i at det kun er FMain der kan kalde denne metode?
Avatar billede noobsaibot Nybegynder
26. april 2005 - 09:09 #27
Nej - når jeg kalder metoden vælger jeg hvilken form jeg vil smide med.
Men uanset ligger treeView1 på FMain.
Avatar billede burningice Nybegynder
26. april 2005 - 09:16 #28
men hvad så hvis du så kalder ovenstående funktion fra f.eks. F_en_anden_en_main

Det her vil du f.eks. ikke kunne

public class F2 : Form {
  public F2() {
      new Properties().LogOnAdmProperties(this);
  }
}
Avatar billede noobsaibot Nybegynder
26. april 2005 - 09:31 #29
Nej, men det får jeg vel heller ikke brug for? Metoden skal kun kunne tilgå treeView1 på FMain.
Avatar billede noobsaibot Nybegynder
02. maj 2005 - 16:49 #30
Og dog - så kan man bare kalde metoden med 2 parametre (FMain og Fen_anden_end_main..)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester