TElementList i zdarzenie OnChange

0

Witam proszę o małą pomoc/podpowiedź bo nie ogarniam... mam aplikację w której jest lista elementów mojego typu

elementy: TElementList

W programie jest możliwość kliknięcia w któryś z elementów i otwiera się teraz okienko do edycji pojedynczego elementu i jeżeli użytkownik wciśnie "ok" to wartości z okienka przepisują się do elementu na liście. No i teraz zrobiłem sobie okienko (nazwijmy je okienkiem "Podglądu") z DataGrid'em który wyświetla mi parametry tych elementów tylko że tak... Okienko podglądu jest niemodalne i gdy w okienku edycji elementu kliknę "ok" i wartości z okienka przepiszą się do elementu na liście elementów to chciałbym żeby okienko Podglądu się automatycznie zaktualizowało. Najłatwiej (najpoprawniej) zrobić to chyba poprzez dodanie do TElementList zdarzenia "OnChange" czy tak? Tylko nie mam pomysłu jak to zrobić... pomóżcie proszę :)

0

Nie wiem czy dobrze zrozumiałem, pytasz w jaki sposób dodać OnChange? To zależy czym jest ten Twój typ TElementList. Natomiast bez użycia OnChange możesz po prostu po kliknięciu tego "ok" wysłać polecenie do drugiej formy, żeby się zaktualizowała. Na przykład wywołując procedurę z sekcji public tej formy, albo za pomocą SendMessage.

0

no tak... nie napisałem wszystkiego racja :) a więc TElementList dziedziczy po CollectionBase

TElementList = class (CollectionBase)

, aplikacja napisana pod .net 1.1. Wysyłanie komunikatów do formy właśnie wolałbym zostawić jako ostateczność bo ta lista elementów która jest wyświetlana w nowym okienku podglądu może być zmieniana w większej ilości okienek (np. w zależności od rodzaju elementu jest otwierane inne okienko do edycji elementu) więc we wszystkich okienkach musiałbym dodawać wysyłanie komunikatu do formy podglądu... dlatego chciałem do mojej klasy listy elementów dodać coś typu zdarzenie OnChange i w formie podglądu podpiąłbym tylko pod to zdarzenie odświeżanie podglądu listy... mam nadzieje że nie zamotałem za bardzo :)

0

OnChange do klasy dodasz jakoś tak:

 
TMyClass = class
  private
    { Private declarations }
    FOnChange: TNotifyEvent;
    FVariable: integer;
    procedure SetVariable(value: integer);
  published
    { Published declarations }
    property OnChange: TNotifyEvent read FOnChange write FOnChange;
  end;
  
  procedure TCtmSlideBar.SetVariable(value: integer);
  begin
    FVariable := value;
    if (Assigned(FOnChange)) then
      FOnChange(Self);
  end;

1 użytkowników online, w tym zalogowanych: 0, gości: 1