Autor Téma: Record v TDictionary - neprejaví sa zmena hodnoty  (Přečteno 864 krát)

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 7413
  • Karma: 44
    • Verze Delphi: W11 + D11.3.1
Record v TDictionary - neprejaví sa zmena hodnoty
« kdy: 22-05-2023, 18:06:52 »

NodeFilter.FilteredByGroup má vždy hodnotu False. Na False to nikde nenastavujem. Neviem si s tým rady. Ja chybu nevidím.
Kód: Delphi [Vybrat]
  1.   TNodeFilter = record
  2.     Node: PVirtualNode;
  3.     FilteredByGroup: Boolean;
  4.     FilteredByCountry: Boolean;
  5.   end;
  6. //  V triede
  7.   FMembers: TDictionary<Integer, TNodeFilter>;
  8. .
  9.   if FFreeMember.Members.TryGetValue(GroupData.PKeys[1], NodeFilter) then
  10.   begin
  11.     FFreeMember.Vst.IsFiltered[NodeFilter.Node] := True;
  12.     NodeFilter.FilteredByGroup := True;  //  Toto mi zbehne, ale neprejaví sa to
  13.   end;
Zmenil som to na triedu a funguje to.
Čo mi chýba vo vedomostiach?
« Poslední změna: 22-05-2023, 18:29:08 od Stanislav Hruška »
Win11 64b, Delphi 11.3.1, FireBird 4.01
Expert na kladenie nejasne formulovaných otázok.

Offline Morrison

  • Hrdina
  • ****
  • Příspěvků: 417
  • Karma: 12
    • Verze Delphi: D5, XE2, 10.4.2, D11
Re:Record v TDictionary - neprejaví sa zmena hodnoty
« Odpověď #1 kdy: 22-05-2023, 22:05:57 »
Je to record, takže ti ho metoda TryGetValue předává hodnotou (vytvoří kopii a ty pak nastavuješ FilteredByGroup jenom té kopii, která se stejně po opuštění bloku zahodí). Třída je předávána odkazem (reference), takže v tom případě pak nastavuješ opravdu ten objekt, který tě zajímá. Dalo by se toho dosáhnout i s recordem, ale TryGetValue by ti musela dávat bud "var TNodeFilter" nebo "[Ref] TNodeFilter" nebo ^TNodeFilter.
nil

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 7413
  • Karma: 44
    • Verze Delphi: W11 + D11.3.1
Re:Record v TDictionary - neprejaví sa zmena hodnoty
« Odpověď #2 kdy: 23-05-2023, 08:28:17 »
Ja som tušil, že to je len moja nevedomosť. Opäť som o kúsok múdrejší.
Ďakujem.
Win11 64b, Delphi 11.3.1, FireBird 4.01
Expert na kladenie nejasne formulovaných otázok.

Offline František

  • Guru
  • *****
  • Příspěvků: 909
  • Karma: 8
    • Verze Delphi: comunity 10.4.2, D2007, D11
Re:Record v TDictionary - neprejaví sa zmena hodnoty
« Odpověď #3 kdy: 24-05-2023, 09:39:17 »
stacilo po uprave pridat
Kód: Delphi [Vybrat]
  1. FFreeMember.Members.AddOrSetValue(...

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 7413
  • Karma: 44
    • Verze Delphi: W11 + D11.3.1
Re:Record v TDictionary - neprejaví sa zmena hodnoty
« Odpověď #4 kdy: 24-05-2023, 10:46:21 »
Ďakujem. Pozriem sa na to. Uvidím či to prerobím.
Win11 64b, Delphi 11.3.1, FireBird 4.01
Expert na kladenie nejasne formulovaných otázok.