19. oktober 2004 - 19:36Der 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 )
I dette særtema om aspekter af AI ser vi på skiftet fra sprogmodeller til AI-agenter, og hvordan virksomheder kan navigere i spændet mellem teknologisk hastighed og behovet for menneskelig kontrol.
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 ;)
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.....
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 :-)
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....
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; }
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...
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:
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...
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...
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.