Spørgsmålet er hvordan du får gemt information i hver TTreeNode om hvilket TabSheet programmet skal gå til.
Hvis du bare har de førnævnte 6 nodes og ikke får flere, så kan du bare gøre følgende:
procedure TForm1.TreeView1Change(Sender: TObject; Node: TTreeNode); begin if assigned(Node) then PageControl1.ActivePageIndex := Node.Index; end;
Sådan som "nop" foreslår.
Har du flere nodes må du gemme indekset et eller andet sted i Treenoden - en hyppigt brugt, men grim variant, er at gemme det i TTreeNode.Data: TTreeView1.Items[0].Data := pointer(0) ... Men det er så skide grimt og man kan ikke vide om værdierne der er nogle af værdierne der trigger et eller andet (prøv bare at indsætte -1 i en combobox: ComboBox.AddObject('Test',TObject(-1));)
Den langt pænere er at gemme instansen af tabsheeten i data-propertyen:
procedure TForm1.TreeView1Change(Sender: TObject; Node: TTreeNode); begin if assigned(Node) then PageControl1.ActivePage := Node.Data; // Indeholder den TTabSheet der skal vises end;
procedure TForm1.Button2Click(Sender: TObject); var i : integer; Node : TTreeNode; begin TreeView1.Items.Clear; for i := 0 to PageControl1.PageCount - 1 do TreeView1.Items.AddObject(nil,PageControl1.Pages[i].Caption,PageControl1.Pages[i]); end;
Prøvede lige min påstand om at indsætte -1 i en TComboBox - det var åbenbart ikke ComboBoksen jeg havde oplevet det ved - det var et andet sted.
Hvis man indsatte en pointer med (signed) positionen -1, så blev det faktisk fortolket som "Index out of Bounds" idet man i VCL-koden kunne læse (efter hukommelsen):
procedure GetObjectItem(aIndex : integer); begin p := GetObject(aIndex); if integer(p) = INDEX_OUT_OF_BOUNDS then // Konstanten er naturligvis -1 raise exception.create('Index out of bounds'); end;
Synes godt om
Slettet bruger
14. maj 2004 - 18:29#4
takker
Synes godt om
Ny brugerNybegynder
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.