WebHU - Programozási kérdések és válaszok

Hogyan hívjunk meg egy másik űrlapot a fő űrlapon lévő panel használatával?

Delphi 10-ben kódolok. Két formám van: FormPrincipal, amely a fő űrlap, és Formbanco, amelyet meg akarok hívni.

A FormPrincipal-ba beraktam egy panelt PanelCorpo és szeretném hívni a Formbanco-et, és ennek a panelnek a pozíciójában mutatni.

Két módszert próbáltam, de mindkettő nem működött. Lásd alább:

1.) FormPrincpal Formbanco hívása a Showmodal használatával:

// TActionlist  OnExecute event 

procedure TFormPrincipal.AbreFormBancoExecute(Sender: TObject);
begin
  try         
    Application.CreateForm(Tformbanco,Formbanco);
    Formbanco.Parent := PanelCorpo;
    Formbanco.Align  := alclient;
    Formbanco.Showmodal;
  finally
    Freeandnil(formbanco);         
  end;
end;

A viselkedés a következő volt: megfelelően megnyitotta a Formbanco nevű űrlapot, de lefagyott. Mindkét forma nem tette lehetővé a fókuszálást!

2.) A FormPrincpal a Formbancót a Show használatával hívja:

// TActionlist  OnExecute event 

procedure TFormPrincipal.AbreFormBancoExecute(Sender: TObject);
begin
  try
    Application.CreateForm(Tformbanco,Formbanco);
    Formbanco.Parent := PanelCorpo;
    Formbanco.Align  := alclient;
    Formbanco.Show;
  finally
    Freeandnil(formbanco);         
  end;
end;

A viselkedés a következő volt: nagyon gyorsan villog a Formbanco, szinte nem látható, és FormPrincipal-ben folytatódik. Nem férek hozzá a Formbanco-hez!

Nagyra értékelem a segítséget ebben.

16.09.2017

  • FWIW, nincs olyan, hogy XE10. 16.09.2017
  • A FormPrincipalben felraktam egy Tpanel PanelCorpo-t, és fel akarom hívni a Formbancót, és ennek a panelnek a pozíciójában megmutatni, ez nagyon zavaró. a formának a panel pozíciójában vagy a panelen belül kell megjelennie? 16.09.2017
  • Nasreddine, igazad van, a Formbancónak meg kell jelennie a panelen belül. 17.09.2017

Válaszok:


1

Egy modális forma nem lehet gyerek. Tehát a második próbálkozás a Show használatával jobb. Ott a hiba az űrlap megsemmisítése. Ne feledje, hogy a Show aszinkron, ezért az űrlap létrehozása után azonnal megsemmisíti. Ne tedd ezt. Valahol máshol kell megsemmisítened, válaszul egy másik eseményre. Tudni fogja, mi legyen ennek.

A függvénynek így kell kinéznie:

procedure TFormPrincipal.AbreFormBancoExecute(Sender: TObject);
begin   
  Formbanco := Tformbanco.Create(Self);
  Formbanco.Parent := PanelCorpo;
  Formbanco.Align := alclient;
  Formbanco.BorderIcons := [];
  Formbanco.BorderStyle := bsNone;
  Formbanco.Show;
end;
16.09.2017
  • A FormPrincipalben felraktam egy Tpanel PanelCorpo-t, és fel akarom hívni a Formbancót, és ennek a panelnek a pozíciójában megmutatni, ez nagyon zavaró. a formának a panel pozíciójában vagy a panelen belül kell megjelennie? 16.09.2017
  • Az, hogy a kód beállítja a szülő tulajdonság formát, egyértelművé teszi a szándékot. 16.09.2017
  • David, köszönöm. A kódod úgy működik, ahogy vártam. 17.09.2017
  • Még mindig van néhány további problémám, amit meg kell oldanom, hogy a teljes menüfunkciót elérjem más űrlapok tökéletes meghívásával. Az a szándékom, hogy a FormPrincipal legyen a nyitólap és a főmenü tartója. 1) Hogyan hívható meg az egyes űrlapok (form2,form3,form4, ...) a FormPrincipalban található Tmenü használatával, miközben megtartja a FormPrincipal és a visilbe menüt? 2) Hogyan lehet bezárni egy jelenleg látható hívott űrlapot, amint egy másik űrlapot hívnak a menüpontból? 3) Ez a helyes megközelítés az űrlapmodulok kezelésére? 17.09.2017
  • Azt hiszem, válaszoltam arra a kérdésre, amit feltettél. Ne próbáljon minket megjegyzésekben rávenni az építészeti tervezés hátralevő részére, mivel csak korlátozottan ismerjük céljait. 17.09.2017
  • David, hadd legyek pontosabb: több űrlapot is meghívnak majd, ezért be kell zárnom a FormPrincipal aktuális megnyitását, mielőtt másik űrlapot hívhatnék. eljárás TFormPrincipal.AbreFormBancoExecute(Sender: TObject); begin //(1) -- Határozza meg, hogy melyik for nyílik meg a FormPrincipalban ??? //(2) -- Zárja be ezt az űrlapot, hogy meghívja a másikat az alábbi kóddal: Formbanco := Tformbanco.Create(Self); Formbanco.Parent := PanelCorpo; Formbanco.Align := alclient; Formbanco.BorderIcons := []; Formbanco.BorderStyle := bsNincs; Formbanco.Show; vége; Kösz ! 18.09.2017
  • Válaszoltam a feltett kérdésre. Az oldal tetején található. Kommentben nem lehet új kérdést feltenni. 18.09.2017
  • David, valami mégis furcsa. Bár látom a hívott űrlapokat, de amikor belépek rá, nem tudom szerkeszteni vagy beírni a dátumot a rácsba vagy a mezőkbe? Mi a baj ezzel a hívással? 18.09.2017
  • Látom, új kérdést tettél fel, ahogy javasoltam. Most mi van ezzel a kérdéssel. Ha úgy érzi, hogy az elsőként feltett kérdésre megérkezett a válasz, kérjük, jelölje elfogadottként. 18.09.2017

  • 2

    Ha a TForm-ot panelként használod, ne tedd. Hozzon létre TFrame-et, és vegye fel a FormPrincipal minden összetevőjeként.

    Ha egy űrlap tartalmát egy másik űrlapon szeretné felvenni (panelen belül, tabulátorvezérlőn stb.), csak akkor teheti meg, ha a második űrlapon felső szintű szülőként egy tpanelt (vagy tlayert) helyez el. Ha egy másik űrlapon szeretné felvenni, módosítsa a Szülő tulajdonságot (és szükség esetén az igazítást). A második űrlapot ebben az esetben nem kell megjeleníteni (de természetesen létrehozni): a panel/elrendezés az elsőn van és azon is látható.

    16.09.2017
  • Patrick, köszönöm az észrevételeket. Sajnálom, de nem értettem teljesen. Tudnál példát kódolni? Kérjük, vegye figyelembe, hogy azt szeretném, hogy a FormPrincipal legyen a jelentkezés nyitólapja, és ebből több más űrlapot is szeretnék hívni, egyszerre egyet, ezen az űrlapon található menün keresztül. Nagyra értékelem a segítségedet. Kösz. 17.09.2017
  • Ezt támogatom. David válasza helyes, de az általad leírtak alapján én is azt javaslom Patrickként, hogy kezdj el beágyazott TFrame-eket használni a TForms helyett. 18.09.2017
  • Új anyagok

    A rádiógomb ellenőrzött eseményének használata a jQueryben
    Ebben a cikkben látni fogjuk, hogyan kell dolgozni a jquery választógombbal ellenőrzött eseményeivel. A választógombok HTML gombok, amelyek segítenek kiválasztani egyetlen értéket egy csoportból...

    Körkörös függőségek megoldása terraformban adatforrásokkal – lépésről lépésre
    Mi az a körkörös függőségek Dolgozzunk egy egyszerű eseten, amikor az SQS-sor és az S3-vödör közötti körkörös függőség problémája van egy egymástól függő címkeérték miatt. provider..

    Miért érdemes elkezdeni a kódolást 2023-ban?
    01100011 01101111 01100100 01100101 — beep boop beep boop Világunk folyamatosan fejlődik a technológia körül, és naponta fejlesztenek új technológiákat a valós problémák megoldására. Amint..

    🎙 Random Noise #2  – Örökbefogadás és hit
    az analitika íratlan világának gondozása Szeretné, hogy ezek a frissítések a postaládájába kerüljenek? Iratkozzon fel itt . "Ha önvezető autókat gyártanak, akkor mi miért ne..

    A legrosszabb politika és prediktív modellek májátültetésre jelöltek számára az Egyesült Államokban
    A máj (vagy óangolul lifer) az emberi test legnehezebb belső szervére utal, amely csendesen működik a nap 24 órájában. Mit csinál a máj? 500 feladatot hajt végre a szervezet egészségének..

    5 webhely, amely 2022-ben fejleszti front-end fejlesztői készségeit
    Frontendmentor.io A tényleges projektek létrehozásával a Frontendmentor.io segítséget nyújt a front-end kódolási képességeinek fejlesztésében. A kódolást azután kezdheti meg, hogy..

    Mikor kell használni a Type-t az interfészhez képest a TypeScriptben?
    A TypeScript a JavaScript gépelt szuperkészlete, amely statikus gépelést ad a nyelvhez. Ez megkönnyíti a robusztus és karbantartható kód írását azáltal, hogy a hibákat a fordítási időben..


    © 2024 webhu.ru, WebHU - Programozási kérdések és válaszok