Avatar billede Slettet bruger
14. maj 2004 - 13:52 Der er 3 kommentarer og
1 løsning

tryk treeview items

jeg har en treeview med 6 items og en pagecontrol med 6 tabsheeds
der er ingen subitems...

når man trykker på 1 items skal den gå til tabsheed 1.

hvordan gør man det?
Avatar billede nop Nybegynder
14. maj 2004 - 14:23 #1
Jeg tror du kan bruge: pcTabbox.ActivePageIndex:= x;// 0..5
Avatar billede hrc Mester
14. maj 2004 - 16:09 #2
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;
Avatar billede hrc Mester
14. maj 2004 - 16:41 #3
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;
Avatar billede Slettet bruger
14. maj 2004 - 18:29 #4
takker
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
Kurser inden for grundlæggende programmering

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