Enabled/Disablet buttonów na drugiej Formie

0

Witam
Pisze jakąś tam bazę danych.
Dodawanie i edycja rekordów odbywa się na Form2.
Rekordy wyświetlają się w DBgrid na Form1.

Dodawanie jak i edycja dobywa się na tych samych komponentach (LabeledEdit, Combobox itd.), czyli nie robiłem Form3 dla edycji.

O co mi chodzi?
Na form1 mam buttony Dodaj i Edytuj. Gdy klikam Dodaj czy Edytuj, odpala się Form2, wiadomo.
Na Formie2 mam buttony Zapisz i Zapisz edycję.
Zależnie, gdy wchodzę na Form2 poprzez Dodaj, przycisk Zapisz edycję ma być nieaktywny.
Analogicznie, gdy wchodzę na Formę2 przez Edytuj, ma być nieaktywny button Zapisz.

Namieszałem, ale pewnie zrozumiale. :)

Co robiłem?

//form1 - przycisk Dodaj
procedure TForm1.JvXPButton8Click(Sender: TObject);
begin
Form2.Showmodal;
 Form2.JvXPButton3.Enabled:=False; //zapisz edycję
 Form2.JvXPButton1.Enabled:=True; //Zapisz
end;

//form1 - przycisk Edytuj
procedure TForm1.JvXPButton10Click(Sender: TObject);
begin
Form2.ShowModal;
Form2.JvXPButton1.Enabled:=False; //Zapisz
Form2.JvXPButton3.Enabled:=True; //zapisz edycję
end;

Jednak to nie działa jak należy, poniewaz jak pierwszy raz wejdę na form2 od uruchomienia programu to przyciski odpowiednie się nie deaktywują, dopiero jak zamknę form2 i wejdę ponownie to działa, ale też nie do końca dobrze:

Klikam w Dodaj, nie działa dezaktywacja, wychodze z form2 i wchodzę znów poprzez Dodaj, już działa wszystko dobrze.
Analogicznie z buttonej Edytuj.

Jak to poprawić??? Co robię źle?

0

Po pierwsze nazywaj po ludzku komponenty, bo Button1 albo Button2 w większym projekcie nic Tobie nie będzie "mówić. A poza
tym jak chcesz robić tym samym dialogiem dodawanie i edycję to nie mnóż przyciski tylko dodaj sobie zmienną globalną w sekcji
public typu boolean, ktora określa czy dodajesz czy edytujesz. Na przykład AddNewData. I jeżeli dodajesz to ustawissz sobie tak
jak poniżej przed dodawaniem czy edycją na True lub False. Zobacz ten kod poad adresem: http://pastebin.pl/20453 jak ja to w
swoim programie rozwiązałem. A dodawanie czy edycję mam zrobioną w ten spsoób. Reszta jest w kodzie AddForm. Wprawdzie
ja zrobilem prostą bazę plikową, jednak jest to bez znaczenia - chodzi jednak o ideę. Nie trzeba mnożyć buttonów, i tak dalej :)

//...
procedure TMainForm.AddBtnClick(Sender : TObject);
begin
  with AddForm do
  begin
    AddNewData := True;
    ShowModal;
  end;
end;

procedure TMainForm.EditBtnClick(Sender : TObject);
begin
  with AddForm do
  begin
    AddNewData := False;
    ShowModal;
  end;
end;
0

dodaj wyłączanie butonów do form -> onCreate.

0

A używasz zwykłych kontrolek DBAware (DBEdit, DBMemo - czyli takich, które są bezpośrednio spięte z DataSource i podpięte pod konkretne pole) ?

0
xD napisał(a)

dodaj wyłączanie butonów do form -> onCreate.

Jak już to pod OnActivte lub OnShow, bo jak nie tworzy od nowa dynamicznie tej formatki
poprzez Constructor tylko raz w pliku projektu to kod w zdarzeniu OnCreate - nie wykona
się przy kolejnym pokazaniu tej formatki - poprzez tylko wywołanie metody ShowModal ;/

0

Twój problem polega na tym, że najperw pokazujesz okno modalne, a dopiero potem chcesz enablować przyciski. ShowModal zatrzymuje wykonywanie dalszych instrukcji. Czyli najpierw musisz ustawić przyciski, a dopiero potem showModal.

0

zle robisz to ze najpierw wywolujesz SzhoModal ktore blokuje wykonanie operacji po tej instrukcji az do zamkniecia okna.
Zamien kolejnosc najpier deaktywuj komponenty pozniej na samym koncu wywoluj ShowModal.
Polecam sposob olesio wystarczy jeden przycisk ktory wykona odpowiednia procedure w zaleznosci czy edycja czy dodawania

Juhas mnie ubiegl :)

0

OK dziękuję za wsparcie. Dostosowałem się do Waszych wskazówek, aby modala wykonywać na końcu i działa. Ciekawostka w tym, że przycisk Dodaj właśnie tak zrobiłem i nie działał poprawnie. Zauważyłem to w kopii programu (co jakiś czas robię kopię programu w razie czego).

Jednak dziękuję za wskazówki. Teraz już działa ładnie.

Pozdrawiam. Dominik. :)

0

A ja nadal nie rozumiem po co takie kombinacje alpejskie. Chyba, że nie używasz kontrolek typu DBAware, tylko sam napełniaśz je danymi - to ok. Ale - jeżeli robisz to na zwykłych kontrolkach DBAware, to przecież metoda Post DataSeta odnosi się tak samo do Stanu dsEdit jak i dsInsert i moim zdaniem tworzenie osobnych przycisków jest bez sensu.

Chyba, że czegoś nie doczytałem albo nie zrozumiałem.

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