Avatar billede Syska Mester
19. oktober 2004 - 19:36 Der er 15 kommentarer og
1 løsning

TreeView opdateres tit

Hej,

Jeg har et TreeView som viser grupper og alle de underkategorier der nu måtte være....

Som jeg har lavet det lige nu, hentes alle grupper når min form bliver loadet, men når jeg så skal tilføje flere grupper, ved jeg ikke helt hvordan jeg skal gøre det....

A) Sende den nye gruppe til serveren og bare oprette den nye gruppe i TreeView'et.

B) Opdatere hele TreeView'et igen ( kræver jo lidt mere trafik ), og så blinker det også når det opdatere mener jeg )

Synes at A virker meget godt som jeg har lavet det nu, men der skal jeg også gemme en beskrivelse af gruppen som ellers ikke ville blive vist i en af mine bokse ( beskrivelse bliver gem i en ArrayList af class'n groupDesc som jeg selv har lavet )
Avatar billede casualty Nybegynder
20. oktober 2004 - 21:07 #1
Hvor tit kommer der nye grupper?
Hvor mange grupper er der ca.?

Hvad er det for en slags grupper du sender til serveren?(hvad for en server?)
Jeg har svært ved at forstå dit spørgsmål da ordlyden måske virker lidt indforstået :)

Hvis der ikke er særlig mange grupper af gangen i dit TreeView (mindre end 50)
Vil jeg godt kunne forsvare at loade hele TreeVieWet ind hver gang der er en ændring.
Men det afhænger jo også af hvor tit du gør det, da man ikke helt kan undgå at det "flimrer" lidt ved en control opdatering. Men det afhænger 100% af hvor tit der sker ændringer, samt hvor mange TreeNodes der generelt er i dit TreeView...

Angående beskrivelsen af gruppen, så kan det tit blive lidt rodet hvis du har en gruppe objekter i et TreeViews, og deres detaljer i en Liste ved siden af. Det jeg plejer at gøre er at lade mine objekter arve fra TreeNode, da jeg således kan kyle
objekterne direkte ind i mit TreeView. Du kunne alternativt også lave en "Holder" klasse som arver fra TreeNode og indeholder dit objekt.

Håber at du kan bruge mine svar, og håber ikka at jeg har misforstået dit spørgsmål fuldstændigt ;)

Skiv hvis der er noget
Mvh Casualty
Avatar billede Syska Mester
20. oktober 2004 - 22:06 #2
slet ikke, ville sådan set bare høre hvad andre gør, og tror også jeg ender med at opdatere hver gang, da det andet kræver meget mere kode, der nemt at kan blive rodet, og det er man jo ikke interesseret i :-). der bliver nok ca. 30-50 grupper + beskrivelser....

Er også ved at lære sporget, meget elegant, da jeg kun har prøvet php/mysql og lidt c og c++ før.....

men vil da lige prøve det med at lave en klasse der arver fra TreeView, hvis jeg kan finde ud af det :-P, havde slet ikke lige tæbkt på den ide, men det er jo derfor eksperten er her...

Det er mssql, tjaa, der kommer jo grupper når man opretter dem, men det er meningen der også sakl virker over nettet, så det er min venne gruppe der skal have adgang til den.....

Men der kommer nok flere spm senere.....

mange tak for feedback...
Avatar billede Syska Mester
20. oktober 2004 - 22:58 #3
ohhh, kan du komme med et eksempel på at arve fra TreeNode, synes slet ikke jeg kan få noget til at virke.....

class myOwnTreeNode : System.Windows.Forms.TreeNode
{
    public string desc;
}

Kan godt skrive til "desc" når jeg har oprettet det, men så efter at jeg har tilføjet det til mit TreeView, kan jeg ikke længere se den, why er det så lige at jeg ikke kan det...........

Nå, men håber at høre fra dig, og smid et svar, du er dagens helt :-)

// ouT
Avatar billede casualty Nybegynder
21. oktober 2004 - 09:49 #4
Hej grunden til at du ikke kan se den er nok at du skal sætte teksten i TreeNode
Du kalder metoder i klassen du arver fra ,med base:

******************************************************
class myOwnTreeNode : System.Windows.Forms.TreeNode{
  private String desc;

  public myOwnTreeNode(String text):base(text){
    desc=text;
  }

  public String Desc{
    get{
      return desc;
    }
    set{
      desc = value;
      base.Text = desc;
    }
  }
}
*****************************************************

Mvh Casualty
Avatar billede Syska Mester
21. oktober 2004 - 10:04 #5
jow jow, jeg tror da lige jeg vil se på det senere i dag når jeg får noget tid i overskud. Og tror generalt jeg skal læse lidt mere om nedarvning, da jeg ikke lige kan se fidusen i det kode du har skrevet.

Da det mest af alt ser ud som en du overskriver den anden værdi Text som angiver hvad den Node skal hedde... eller er det mig der har misforstået noget...

det jeg vil er at tilføje en ekstra værdi, så jeg både kan have (Text, Tag, desc) som en 3 værdier i hver TreeNode. Men er det det din kode gør, så må jeg jo lige bryde min hjerne og prøve at forstå hvordan det virker....

// ouT
Avatar billede casualty Nybegynder
21. oktober 2004 - 17:42 #6
Når du laver en klasse (myOwnTreeNode) der arver fra TreeNode vil myOwnTreeNode have alle de metoder samt properties til rådighed som TreeNode har. Hvis man ønsker, fra myOwnTreeNode, at kalde en metode i den klasse den arver fra (TreeNode), skal man blot kalde "base.metode()" (man kan vist også bare kalde metoden uden "base"). TreeNodes property, der sætter den aktuelle TreeNodes text hedder "Text". Derfor sørger jeg for at når Property Desc bliver sat i myOwnTreeNode så sætter den Text i TreeNode klassen som den arver fra.

Du kan sagtens have flere variabler i din myOwnTreeNode klasse:

******************************************************
using System;
using System.Windows.Forms;


public class MyOwnTreeNode: TreeNode {
  private String desc;
  private String myTag;
  private String displayText;

  public MyOwnTreeNode() {
  }

  public MyOwnTreeNode(String displayText):base(displayText){
    this.displayText = displayText;
  }
   
  public String Desc{
    get{
      return desc;
    }
    set{
      desc = value;
    }
  }

  public String MyTag{
    get{
      return myTag;
    }
    set{
      myTag = value;
    }
  }

  public String DisplayText{
    get{
      return displayText;
    }
    set{
      displayText = value;
      base.Text = displayText;
    }
  }
}
******************************************************

Mvh Casualty
Avatar billede casualty Nybegynder
21. oktober 2004 - 19:51 #7
Et svar, hvis det skulle være... :)
Avatar billede Syska Mester
21. oktober 2004 - 22:09 #8
jo, nu har jeg lige testet igen, og det virker også med at sættte de forskelle ekstra added ting......

Men i min "treeView1_AfterSelect" vil jeg bare lige for at teste prøve at smide nogle af de værdier ud i en MessageBox, men nu kan jeg ikke få adgang til dem efter at de er blevet tiæføjet min TreeView, hvad er det lige jeg gør galt, eller virker det bare ikke..... jeg kan godt inden de bliver tilføjet mit view, ændre de forskellige værdier (Desc, MyTag, etc.) Men kan ikke trække dem ud efter jeg har tiæføjet dem.....

bruger følgende kode....:
private void treeView1_AfterSelect(object sender, System.Windows.Forms.TreeViewEventArgs e)
{
    MessageBox.Show( treeView1.SelectedNode.Text.ToString() );
}

Som virker fint med oprindelige ting, men ikke de nye, hvad er det lige der er galt :-( håber du kan finde fejlen...

// ouT
Avatar billede Syska Mester
21. oktober 2004 - 22:09 #9
ps. Da det er ved at være lidt mere omfattende skal du nok få lidt flere point hvis du ønsker det
Avatar billede casualty Nybegynder
21. oktober 2004 - 22:20 #10
Jeg kan sagtens få det til at virke:

private void treeView1_AfterSelect(object sender, System.Windows.Forms.TreeViewEventArgs e)
{
    MessageBox.Show( treeView1.SelectedNode.Text.ToString() );
}

Så jeg ved ikke hvor din fejl kommer fra... Hvad sker der når du selecter en Node?
Kommer den med en fejl eller sker der slet ingen ting?

Husk at hvis du skal hive de specifikke værdier ud af træet (Desc, MyTag,DisplayText)
Så skal du caste dem til det oprindelige objekt:

private void treeView1_AfterSelect(object sender, System.Windows.Forms.TreeViewEventArgs e) {
            MessageBox.Show(((MyOwnTreeNode)treeView1.SelectedNode).Desc);
        }

Hvis det fortsætter bliver du nødt til at poste lidt mere af koden her...

Mvh Casualty

PS: Det er lige meget med pointene, er her ikke på grund af dem :)
Avatar billede casualty Nybegynder
21. oktober 2004 - 22:25 #11
Når du hiver noget ud af dit TreeView vil det altid Være af typen TreeNode.
Din klasse MyOwnTreeNode vil også være af typen TreeNode da den arver fra TreeNode.

Derfor bliver du nødt til at Caste den tilbage til det objekt som den er:

TreeNode node = treeView1.SelectedNode;
MyOwnTreeNode mNode = (MyOwnTreeNode)node;

Eller kortere:
MyOwnTreeNode mNode = (MyOwnTreeNode)treeView1.SelectedNode;

Det er det der er smart ved arv... Man kan lade A arve fra B og derved vil klassen altid have B´s metoder og variabler. Caster man den til A vil den have A+B´s metoder,
men den kan opfattes som begge typer A eller B...
Avatar billede casualty Nybegynder
21. oktober 2004 - 22:28 #12
Hvis du vil læse lidt om arv, fra én der (ikke utænkeligt) er bedre til at forklare det på skrift end mig, så kig på Eksempel 3 på denne side:
http://devcentral.iticentral.com/articles/CSharp/intro_Csharp/default.php
Avatar billede Syska Mester
21. oktober 2004 - 22:37 #13
Det sidste mener du vel modsat, at hvis man caster B til A mister den B's mothods, da B arvede fra A ik'?
Avatar billede casualty Nybegynder
21. oktober 2004 - 22:52 #14
Nej...
Hvis din klasse (A)MyOwnTreeNode arver fra (B)TreeNode vil du altid kunne tilgå
(B)TreeNodes metoder+(A)MyOwnTreeNodes metoder hvis du har et objekt af typen
(A)MyOwnTreeNode. Hvorimod hvis den ikke er castet til (A)MyOwnTreeNode, er det kun (B)TreeNodes metoder du kan tilgå...

Du kan se det som at i MyOwnTreeNode står der at den arver fra TreeNode... Derfor kan du godt finde begges metoder, hvorimod der ikke står i TreeNode at MyOwnTreeNode arver fra den, derfor kan du kun se TreeNodes metoder...
Avatar billede Syska Mester
21. oktober 2004 - 23:23 #15
ja, tror bare vi snakker lidt forbi hinanden lige nu, men jeg kan se på det hele er vi er enige... :-P

takker mange gange
Avatar billede casualty Nybegynder
21. oktober 2004 - 23:31 #16
Det var da så lidt :)
Håber at det hjalp...
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