Avatar billede noobsaibot Nybegynder
20. april 2005 - 16:14 Der er 17 kommentarer og
1 løsning

Gøre et treeview på en adnen form visible!

Hvordan kan jeg fra min form1 gøre mit treeview på form2 visible?
Avatar billede burningice Nybegynder
20. april 2005 - 18:36 #1
1) du skal have en reference til form2 på form1
2) dit treeview på form2 skal være public
3) når de to første punkter er opfyldt kan du gøre følgende

minForm2.Treeview.Visible = true;
Avatar billede webcreator Nybegynder
20. april 2005 - 18:38 #2
Det kan du gøre ved at lave en reference for form2 på din form1. Du laver flg. på din klasse i form1 :

Form2 frm2 = new Form2();

----------------------------------------------------------------

På form2 laver du nu en public metode der hedder VisTreeView :

public void VisTreeView()
{
    treeview.Visible = true;
}

----------------------------------------------------------------

Nu kan du fra form1 vise din treeview på denne måde :

frm2.VisTreeView();
Avatar billede webcreator Nybegynder
20. april 2005 - 18:39 #3
Forskellen på CyberFessor's løsning og min er, at hans kræver at din komponent er Public. Hvis du vil bibeholde en vis inkapsulering i dit projekt, så bør du benytte min metode. Er du ligeglad, så kan du benytte begge metoder
Avatar billede noobsaibot Nybegynder
20. april 2005 - 18:49 #4
Kan jeg initialisere --> Form2 frm2 = new Form2(); --> under:



public FMain()
        {
           
            //
            // Required for Windows Form Designer support
            //
            InitializeComponent();

            //
            // TODO: Add any constructor code after InitializeComponent call
            //
        }
Avatar billede burningice Nybegynder
20. april 2005 - 18:49 #5
webcreator>>

og så er der lige den forskel, at din eksempel aldrig vil kunne virke.

du opretter jo en ny Form2-instans istedet for at hive fat i reference til den form2 der allerede er åben.
Avatar billede noobsaibot Nybegynder
20. april 2005 - 18:52 #6
eller instantisere og ikke initialisere
Avatar billede noobsaibot Nybegynder
20. april 2005 - 18:53 #7
okay- hvordan laver jeg en reference så?
Avatar billede webcreator Nybegynder
20. april 2005 - 19:18 #8
Du har ganske ret, Cyber - tak for at du lige gjorde mig opmærksom på det :-)
Avatar billede noobsaibot Nybegynder
20. april 2005 - 19:27 #9
cyberfessor - hvordan laver jeg referencen?
Avatar billede burningice Nybegynder
20. april 2005 - 19:30 #10
ud fra din numerering af formene går jeg ud fra at form2 blivr åbnet fra form1. I så fald, så skal du på form1 have et field der kan indholde referencen:

public class Form1 : System.Windows.Forms.Form {
  private Form2 frm2;

  (...) alt det andet i klassen


  btn_Click(...) {
      frm2 = new Form2();
      frm2.Show();
  }

  btnVisTreeview(...) {
      if (this.frm2 != null) frm2.VisTreeview();
  }
}
Avatar billede noobsaibot Nybegynder
20. april 2005 - 19:54 #11
Altså:

Jeg har mit treeview på form1 (og min VisTreeView metode)
Jeg har mit btn_clickevent på form2.

Derfor laver jeg en reference fra min form2 til min form1.

Kan jeg ikke bare skrive frm1.VisTreeView() under mit click_event på form2?
Avatar billede noobsaibot Nybegynder
20. april 2005 - 19:55 #12
Kom vist til at bytte rundt i beskrivelse (sorry)
Avatar billede noobsaibot Nybegynder
20. april 2005 - 21:02 #13
Er ikke helt med på hvordan ejg laver referencen
Avatar billede burningice Nybegynder
20. april 2005 - 21:09 #14
okay...

din Form2-klasse:

public class Form2 : System.Windows.Forms.Form {
  private Form1 frm1;

  (...) alt det andet i klassen

  public Form2(Form1 frm1) {
    this.frm1 = frm1;

    (...) alt det andet
  }

  btn_Click(...) {
      frm1.VisTreeViw();
  }
}

på Form1:

btn_Click(...) {
  Form2 frm = new Form2(this);
  frm.Show();
}
Avatar billede noobsaibot Nybegynder
20. april 2005 - 21:15 #15
Jeg får: System.NullReferenceException
Hvorfor?
Avatar billede noobsaibot Nybegynder
20. april 2005 - 21:39 #16
Jeg vil prøve at lave en klasse i stedet.
Det eneste den skal kunne er at ændre treeView1.Visible = true;
Men min reference FMain formmain virker ikke for jeg kan ikke tilgå det treeview i klassen ...

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

namespace Bleh
{
    /// <summary>
    /// Summary description for ShowTreeView.
    /// </summary>
    public class ShowTreeView
    {
        public FMain formmain; <----- VIRKER ikke??


        public static void ShowTreeView()
        {
            //
            // TODO: Add constructor logic here
            //
           
        }
    }
}
Avatar billede noobsaibot Nybegynder
20. april 2005 - 22:39 #17
Jeg lukker
Avatar billede burningice Nybegynder
21. april 2005 - 07:18 #18
noobsaibot>> i din sidte kommentar, hvordan havde du forestillet dig på nogen som helst måde, at formmain skulle kunne komme til at indeholde en reference til FMain? Det sker jo ikke af sig selv som ren magi.

Dette er et af de typiske problemer folk der starter med Object Orienteret Programmering løber ind i, og lige så enkelt løsningen er, lige så svær kan den være at forstå.

De magiske ord man skal fortå i denne sammenhæng er klasser, instanser og referencer.

ved at skrive public FMain formmain; har du definerer at her er en variabel som skal kunne indeholde en >reference< til en FMain->instans<. Men på nuværende tidspunkt er variablen TOM (!!). Det er DIN opgave at putte noget i den, og det skal være en >reference< til den FMain der allerede findes en instans af. Der kan jo godt være 213423486234327892398 instanser af FMain-klassen, og kun f.eks. den ene der bliver vist på skærmen. Så nytter det jo ikke at man kalder ShowTreeView() på en af de 213423486234327892397 andre, for det vil man ikke kunne se. Det gælder altså at få en reference til netop den ene som brugeren kan se.

Det kan gøre på mange forskellige måder, men det jeg skitsede i 20/04-2005 21:09:41 er langt den simpleste og som oftest tilstrækkeligt i små projekter.
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