Práce s více formuláři – .NET – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Práce s více formuláři – .NET – Fórum – Programujte.comPráce s více formuláři – .NET – Fórum – Programujte.com

 

massic0
Duch
6. 10. 2012   #1
-
0
-

Prosím o radu,

Umím vytvořit druhý formulář z prvního formuláře a předat mu argumenty.

Ten první zneviditelním ( je to loginovy form), jenže ho nemůžu closenout, to zavře všechny.

Jak zavřu ten první z druhého ? tedy z jeho dítěte ?

-----------------

Snad to vysvětlím srozumitelně :

jako první se spustí (  Application.Run(splash)  ) form Splash <- v něm je login a podle udaju z SQL DB, se spustí buď

form Recepcni  nebo form Administrace

ty vytvářím pomocí  new a předávám jim argumenty která osoba je přihlášena.zároveň ještě v kódu splashe než se vytvoří ten form, tak splash zneviditelním.

Jenže bych ho potřeboval uplně zrušit.

Tudíž když pak zavřu recepcni nebo administraci, aplikace se vlastně nevypne.

A nijak mi k tomu splashi uz pristpovat nejde z dceřiných formů.

díky

Nahlásit jako SPAM
IP: 78.128.186.–
ingiraxo+15
Grafoman
6. 10. 2012   #2
-
0
-

chceš zavřít Form1 pomocí Form2?

pokud tohle uděláš, tak se automaticky ukončí aplikace, Form1 běží na hlavním vlákně

pokud chceš ukončit Form1 z Form2, tak stačí předat instanci Form1 a zavolat Close()

nebo mě teď napadá ještě jedna možnost, co by mělo fungovat, ale nezkoušel jsem to.. kdyby si ukončil Form1 a opět zavolal Application.Run(..) (tohle řešit v Main) na jinej form, tak ten Form by měl opět bězet na hlavním vlákně a fungovat tak, jak chceš

Nahlásit jako SPAM
IP: 213.168.183.–
Moje aplikace: http://ophite.cz
Tutoriály na: C#
massic0
Duch
6. 10. 2012   #3
-
0
-

Hodil bys mi prosím příklad kódu ?

děkuji moc

Nahlásit jako SPAM
IP: 78.128.186.–
ingiraxo+15
Grafoman
6. 10. 2012   #4
-
0
-

#3 massic
no, normálně předáš Form2 do Form1 

// do Form1 nekam - tlacitko nebo neco
new Form2().Show(this);

// ve Form2 ukonceni Form1 jako
Owner.Close();

ale jak jsem říkal, tak ti to ukončí app, protože Form1 jede na hlavním vlákně

pokud to chceš modálně, tak ShowDialog(..)

a btw díky tomuhle propojení se ukončí automaticky i Form2, pokud ukončíš Form1

Nahlásit jako SPAM
IP: 213.168.183.–
Moje aplikace: http://ophite.cz
Tutoriály na: C#
JardaJirava0
Stálý člen
6. 10. 2012   #5
-
0
-
Nahlásit jako SPAM
IP: 213.192.30.–
MCAD, MCPD
http://jirava.net/blog
http://xaml.cz - Magazín moderních technologií založených na XAML
ingiraxo+15
Grafoman
6. 10. 2012   #6
-
0
-

Ale pokud chceš mít něco jako splash, tak bych to doporučil tímto způsobem 

// Main(string[] args)

// otevre splash screen
Application.Run(new Splash());

// az se ukonci splash, tak otevre normalni okno aplikace
Application.Run(new Form1());
Nahlásit jako SPAM
IP: 213.168.183.–
Moje aplikace: http://ophite.cz
Tutoriály na: C#
massic0
Duch
6. 10. 2012   #7
-
0
-

#6 ingiraxo
Tohle by bylo pěkné, ale z toho splashe potrebuji predat do tech dvou formů dvě string proměnné :(

Nahlásit jako SPAM
IP: 78.128.186.–
massic0
Duch
6. 10. 2012   #8
-
0
-

#4 ingiraxo
hlásí mi to :

System.NullReferenceException was unhandled
  HResult=-2147467261
  Message=Object reference not set to an instance of an object.
  Source=Elitedental
  StackTrace:
       at Elitedental.admin..ctor(String prihlasen, String nickprihlaseneho) in e:\PROGRAMOVANI\ELITE DENTAL\Elitedental\Elitedental\admin.cs:line 22
       at Elitedental.splash.autorizace() in e:\PROGRAMOVANI\ELITE DENTAL\Elitedental\Elitedental\splash.cs:line 53
       at Elitedental.splash.stiskenteruLogin(Object sender, KeyEventArgs e) in e:\PROGRAMOVANI\ELITE DENTAL\Elitedental\Elitedental\splash.cs:line 181
       at System.Windows.Forms.Control.OnKeyDown(KeyEventArgs e)
       at System.Windows.Forms.Control.ProcessKeyEventArgs(Message& m)
       at System.Windows.Forms.Control.ProcessKeyMessage(Message& m)
       at System.Windows.Forms.Control.WmKeyChar(Message& m)
       at System.Windows.Forms.Control.WndProc(Message& m)
       at System.Windows.Forms.TextBoxBase.WndProc(Message& m)
       at System.Windows.Forms.TextBox.WndProc(Message& m)
       at System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
       at System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
       at System.Windows.Forms.NativeWindow.DebuggableCallback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
       at System.Windows.Forms.UnsafeNativeMethods.DispatchMessageW(MSG& msg)
       at System.Windows.Forms.Application.ComponentManager.System.Windows.Forms.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop(IntPtr dwComponentID, Int32 reason, Int32 pvLoopData)
       at System.Windows.Forms.Application.ThreadContext.RunMessageLoopInner(Int32 reason, ApplicationContext context)
       at System.Windows.Forms.Application.ThreadContext.RunMessageLoop(Int32 reason, ApplicationContext context)
       at System.Windows.Forms.Application.Run(Form mainForm)
       at Elitedental.Program.Main() in e:\PROGRAMOVANI\ELITE DENTAL\Elitedental\Elitedental\Program.cs:line 19
       at System.AppDomain._nExecuteAssembly(RuntimeAssembly assembly, String[] args)
       at System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args)
       at Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
       at System.Threading.ThreadHelper.ThreadStart_Context(Object state)
       at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
       at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
       at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
       at System.Threading.ThreadHelper.ThreadStart()
  InnerException:

Nahlásit jako SPAM
IP: 78.128.186.–
ingiraxo+15
Grafoman
6. 10. 2012   #9
-
0
-

#7 massic
od toho můžeš použít třeba událost closing.. třeba něco jako...

    class Program
    {
        static void Main(string[] args)
        {
            string str1 = null;
            string str2 = null;
            Splash splash = new Splash();

            splash.FormClosing += new FormClosingEventHandler((o, e) =>
            {
                str1 = splash.String1;
                str2 = splash.String2;
            });
            Application.Run(splash);
            Application.Run(new Form1(str1, str2));
        }
    }

    class Splash : Form
    {
        public string String1 { get; private set; }
        public string String2 { get; private set; }
    }

    class Form1 : Form
    {
        public Form1(string str1, string str2)
        {
        }
    }
Nahlásit jako SPAM
IP: 213.168.183.–
Moje aplikace: http://ophite.cz
Tutoriály na: C#
Zed_10
Newbie
7. 10. 2012   #10
-
0
-

Ahoj, řešil jsem třeba přihlášení do systému pomocí databáze, kde byl jeden form přihlašovací a druhý hlavní.

Buď jsem prováděl kód pro přihlášení přímo v přihlašovacím formuláři nebo se dají předat parametry do formuláře hlavního a nebo se z hlavního parametry převezmou z formuláře přihlašovacího (preferuji).

Vtip je v tom, že se přihlašovací form otevírá v při události load hlavního fromu a pokud je dialog.result přihlašovací stránky OK provádí se další kód a nebo se zavře vše (tedy hlavní form se nezobrazí).

Pokud chci zpracovávat data v hlavním formu mohu při otevírání přihlašovacího formu předat reference na objekty do vlastností přihlašovacího formu, kde se data aktualizují. Nebo se můžou udělat veřejné vlastnosti ve formu přihlašovacím nebo v hlavním (tam by měly být statik jelikož se nebude vytvářet instance), ke kterým se přiřadí hodnoty z druhého formuláře.

Nahlásit jako SPAM
IP: 78.102.92.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 59 hostů

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý