Válí se ti projekty v šuplíku? Dostaň je mezi lidi a získej cool tričko a body na profi IT kurzy v soutěži ITnetwork summer 2017!
Přidej si svou IT školu do profilu a najdi spolužáky zde na síti :)
Avatar
matesax
Redaktor
Avatar
matesax:4.6.2012 16:42

Dobrý den,
ukotvil jsem každý nově vytvořený form2 - takto:

this.panel1.Controls.Add(p);

(p je form2). V panelu jsou ale všechny formy2 aktivní - lze alespoň nějak manuálně deaktivovat form? Aktivovat je snadné - ale naopak nevím proč - ne. Děkuji za každou pomoc.

 
Odpovědět 4.6.2012 16:42
Avatar
matesax
Redaktor
Avatar
Odpovídá na matesax
matesax:4.6.2012 16:44

Abyste mi dobře rozuměli chci normální chování jako mimo panel,...

 
Nahoru Odpovědět 4.6.2012 16:44
Avatar
David Jančík [sczdavos]
Tým ITnetwork
Avatar
Odpovídá na matesax
David Jančík [sczdavos]:4.6.2012 17:42

Pokud aktivovat form znamená Controls.Add() pak deaktivace bude Controls.Remove()?

Nahoru Odpovědět 4.6.2012 17:42
Čím více času dostaneš, tím méně ho máš.
Avatar
matesax
Redaktor
Avatar
Odpovídá na David Jančík [sczdavos]
matesax:4.6.2012 17:52

Ne mám na mysli Activate() a Deactivate() - prostě když kliknu mimo aplikaci - aplikace trochu zešediví - je neaktivní - a naopak když do ní kliknu, tak se zaktivuje - toto mám na mysli normálním chováním, ale form v panelu se kliknutím mimo něj nedeaktivuje a je stále aktivní,...

 
Nahoru Odpovědět 4.6.2012 17:52
Avatar
matesax
Redaktor
Avatar
Odpovídá na David Jančík [sczdavos]
matesax:4.6.2012 17:54

Ale použít lze jen this.p.Activate(), ale to druhé prostě ne,...

 
Nahoru Odpovědět 4.6.2012 17:54
Avatar
David Jančík [sczdavos]
Tým ITnetwork
Avatar
Odpovídá na matesax
David Jančík [sczdavos]:4.6.2012 18:04

A když použiješ Activate na hlavní form tak to s ostatními udělá co?

Nahoru Odpovědět 4.6.2012 18:04
Čím více času dostaneš, tím méně ho máš.
Avatar
matesax
Redaktor
Avatar
Odpovídá na David Jančík [sczdavos]
matesax:4.6.2012 18:10

No to co má - zaktivuje to form - ten je aktivní pořád,... Právě že normálně to funguje tak, že kliknu na form - ten se zaktivuje a zbytek deaktivuje - jenže tyto formy mám dockované v panelu (Formu1). Proto píši sem,...

 
Nahoru Odpovědět 4.6.2012 18:10
Avatar
David Jančík [sczdavos]
Tým ITnetwork
Avatar
Odpovídá na matesax
David Jančík [sczdavos]:4.6.2012 18:17

Moc temu nechápu. Můžeš mi to zase poslat nebo dát nějaký screen?

Nahoru Odpovědět 4.6.2012 18:17
Čím více času dostaneš, tím méně ho máš.
Avatar
matesax
Redaktor
Avatar
Odpovídá na David Jančík [sczdavos]
matesax:4.6.2012 18:21

Tak ono není co chápat - mám panel a v něm přidám form - jak jsem uved hoře (meodou Add()). No ale nepřidám jen jeden form, ale více formů. A všechny tyto formy jsou aktivní - kliknutím mimo do hlavního formu se nic nestane - kliknutím mimo se zdeaktivuje koráte hlavní form,...

http://ulozto.cz/…Us/pinet-zip

 
Nahoru Odpovědět 4.6.2012 18:21
Avatar
matesax
Redaktor
Avatar
Odpovídá na David Jančík [sczdavos]
matesax:4.6.2012 18:22

Potřebuji zařídit normalní chování formů dockovaných v panelu formu hlavního (což je Form1).

 
Nahoru Odpovědět 4.6.2012 18:22
Avatar
David Jančík [sczdavos]
Tým ITnetwork
Avatar
Odpovídá na matesax
David Jančík [sczdavos]:4.6.2012 19:18

Přiřaď event Activated pictureBox eventu MouseEnter a Deactivated MouseLeave.

Nahoru Odpovědět 4.6.2012 19:18
Čím více času dostaneš, tím méně ho máš.
Avatar
matesax
Redaktor
Avatar
Odpovídá na David Jančík [sczdavos]
matesax:6.6.2012 13:43

Ptal jsem se na EN fóru - odkázali mne na UserControl. Jen nevím, jak bych to měl udělat - nepomohl by jsi mi alespoň s teorií? Děkuji.

 
Nahoru Odpovědět 6.6.2012 13:43
Avatar
matesax
Redaktor
Avatar
Odpovídá na matesax
matesax:6.6.2012 13:45

Tím mám na mysli pro mojí situaci - protože nechápu, jak to mám udělat s formem,...

 
Nahoru Odpovědět 6.6.2012 13:45
Avatar
David Jančík [sczdavos]
Tým ITnetwork
Avatar
Odpovídá na matesax
David Jančík [sczdavos]:6.6.2012 14:16

A to jak jsem ti psal jsi zkoušel? To mi fungovalo. Při najetí se zaktivoval při opuštění se zdeaktivoval...

Nahoru Odpovědět 6.6.2012 14:16
Čím více času dostaneš, tím méně ho máš.
Avatar
matesax
Redaktor
Avatar
Odpovídá na David Jančík [sczdavos]
matesax:6.6.2012 14:23

Ale já to potřebuju normálně - kvůli context menu stripu. Dvojklikem pravým tlačítkem spouštím soubor - takže na pravé tlačítko nemohu dát ten contextmenu... Totiž to menu mám na dvojklik myši - ale funguje to jen tím pravým, nebo dvakrát levým a pak jednou pravým,...

 
Nahoru Odpovědět 6.6.2012 14:23
Avatar
David Jančík [sczdavos]
Tým ITnetwork
Avatar
Odpovídá na matesax
David Jančík [sczdavos]:6.6.2012 14:29

Moc tě nechápu... Co tedy vlastně chceš?

Nahoru Odpovědět 6.6.2012 14:29
Čím více času dostaneš, tím méně ho máš.
Avatar
matesax
Redaktor
Avatar
Odpovídá na David Jančík [sczdavos]
matesax:6.6.2012 14:36

No buďto přijít na to, proč dvojklik platí jen pro pravé tlačítko - či dvojklik levým + klik pravým - sám si to můžeš vyzkoušet (jedná se o spuštení programu). Pak by se mi uvolnilo pravé tlačítko - contextmenu strip bych dal pod pravé tlačítko a pak bych to mohl udělat podle tebe. Nebo pomocí toho UserControl,...

 
Nahoru Odpovědět 6.6.2012 14:36
Avatar
matesax
Redaktor
Avatar
Odpovídá na David Jančík [sczdavos]
matesax:6.6.2012 14:43

Ještě taková drobnost - bylo mi doporučeno nehrát si s top levelem, ale využít tohoto:

 var container = new ContainerControl();
container.Controls.Add(...);

Jenže jak mám tento form zobrazit ve Formu1? Děkuji.

 
Nahoru Odpovědět 6.6.2012 14:43
Avatar
David Jančík [sczdavos]
Tým ITnetwork
Avatar
Odpovídá na matesax
David Jančík [sczdavos]:6.6.2012 15:16

Dvojklik levým ti nefunguje protože:

private void Form2_MouseDown(object sender, MouseEventArgs e)
        {
            if (e.Button == MouseButtons.Left)
            {
                ReleaseCapture();// ! tímto jej rušíš
                SendMessage(Handle, WM_NCLBUTTONDOWN, HT_CAPTION, 0);
            }
        }

Dej tam jen podmínku:

if ((e.Button == MouseButtons.Left) && (e.Clicks != 2))
Nahoru Odpovědět 6.6.2012 15:16
Čím více času dostaneš, tím méně ho máš.
Avatar
matesax
Redaktor
Avatar
Odpovídá na David Jančík [sczdavos]
matesax:6.6.2012 15:26

A jo - já to měl ošetřené ve Formu1. :) Pomohl by jsi mi ještě s tím containerem? Děkuji.

 
Nahoru Odpovědět 6.6.2012 15:26
Avatar
David Jančík [sczdavos]
Tým ITnetwork
Avatar
Odpovídá na matesax
David Jančík [sczdavos]:6.6.2012 15:36

A cože to řešíš s tím kontejnerem? Nikdy jsem ho nepoužíval. Čeho chceš dosáhnout?

Nahoru Odpovědět 6.6.2012 15:36
Čím více času dostaneš, tím méně ho máš.
Avatar
matesax
Redaktor
Avatar
Odpovídá na David Jančík [sczdavos]
matesax:6.6.2012 16:08

Mám ho použít pro to přidávání Formu2 do Formu1. Prý není dobré hrát si s top levelem,...

 
Nahoru Odpovědět 6.6.2012 16:08
Avatar
matesax
Redaktor
Avatar
Odpovídá na David Jančík [sczdavos]
matesax:6.6.2012 16:12

Ještě mám jeden problém - potřebuji zapsat změnu lokace onoho Formu2. Jenže pod eventem mouse up mi to nepracuje (chci jen aktuální pozici (takže nějak ji vytahovat z eventu locationchange mi přijde zbytečné) - pokud dojde ke změně,...). Tak mě napadá dát to pod mousemove - s podmínkou jeli stisknuta myš. Jak by ta podínka měla vypadat? Děkuji.

 
Nahoru Odpovědět 6.6.2012 16:12
Avatar
David Jančík [sczdavos]
Tým ITnetwork
Avatar
Odpovídá na matesax
David Jančík [sczdavos]:6.6.2012 16:47

Sem to zkusil a funguje mi to. Normálně tvořim ChildForm.

V konstruktoru Form1

TransparencyKey = Color.Ivory;// nastavím transparenci

MdiClient Client = new MdiClient();// nastavím že form1 je Mdi klientem
this.Controls.Add(Client);

// a pak to přidáváš takto:
this.p = new Form2(Path.GetFileName(s), s, this);
this.p.MdiParent = this;
                            this.panel1.Controls.Add(p);
this.p.Show();

Přidávám to na panel, který překresluje Form1. Souřadnice se vypisují do Output okna.

Tady máš ten zdroják, kdyby ti něco nešlo. https://dl.dropbox.com/…er/Pinet.zip

Snad jsem to pochopil...

Nahoru Odpovědět 6.6.2012 16:47
Čím více času dostaneš, tím méně ho máš.
Avatar
matesax
Redaktor
Avatar
Odpovídá na David Jančík [sczdavos]
matesax:6.6.2012 17:24

Tak mě to nejde - přetáhnu tam jeden soubor a nic,... Krom toho mám to v try bloku - kde se mi anuluje save.dat - takže vím mohu s jistotou říci, že to selhalo,...

 
Nahoru Odpovědět 6.6.2012 17:24
Avatar
matesax
Redaktor
Avatar
Odpovídá na David Jančík [sczdavos]
matesax:6.6.2012 17:31

Tak jsem to trochu opravil - zkomolil jsem to. Eviduji invertní problém - ještě horší - nyní jsou všechny formy deaktivovány a při jejich odstranění se nesmažou z save.dat,... :)

 
Nahoru Odpovědět 6.6.2012 17:31
Avatar
David Jančík [sczdavos]
Tým ITnetwork
Avatar
Odpovídá na matesax
David Jančík [sczdavos]:6.6.2012 18:20

A s čím tedy potřebuješ pomoct? Já nevím co konkrétně chceš a psát za tebe program nechci.

Normálně si udělej okno a nastav mu IsMdiContainer. Pak si tam dej nějaký panel a na ten dávej ty další formy jako ChildMdi. Jak jsem ti psal.

Ty souřadnice zjistíš pak normálně pomocí Left, Top, bere to relativně od krajů v parent Formu.

Nebo si udělej panel a na ten dávej třeba picture box. Nevím totiž, jestli není zbytečné vytvářet několik instancí Form2 když ti stačí pictureBox, který můžeš využít stejně.

Musíš si promyslet, jak to chceš udělat. Nejdřív si udělej nějaký testovací blok odkud budeš načítat data a až to budeš mít odladěný pak dodělej přidávání přesouváním, pozicování atd...

Nahoru Odpovědět 6.6.2012 18:20
Čím více času dostaneš, tím méně ho máš.
Avatar
matesax
Redaktor
Avatar
Odpovídá na David Jančík [sczdavos]
matesax:6.6.2012 18:27

Tobě to prostě nějak zázračně funguje - kouknul jsem do tvého zdrojáku a něco si změnil i ve Form2 - tak jsem myslel, že tam najdu odpověď - ale vypadáto, že to je jenom z nějakého generátoru - tak se na to ještě podívám. Děkuji za pomoc.

 
Nahoru Odpovědět 6.6.2012 18:27
Avatar
David Jančík [sczdavos]
Tým ITnetwork
Avatar
Odpovídá na matesax
David Jančík [sczdavos]:6.6.2012 18:32

Pouze jsem do tvého zdrojového kódu připsal řádky, které jsem v komentáři uvedl. Nebo mi pošli současný zdrojový kód a já se podívám, kde máš chybu a řeknu ti. :)

Nahoru Odpovědět 6.6.2012 18:32
Čím více času dostaneš, tím méně ho máš.
Avatar
matesax
Redaktor
Avatar
Odpovídá na David Jančík [sczdavos]
matesax:6.6.2012 18:36

No právě že tam nemám chybu - a nejde mi to - problém je ve formu1. Zkopíruji tam tvůj kód a jede to - ale já mám stejný kód... :)

Edit: Kašlu na to - děkuji za pomoc - vše jede jak má,...

 
Nahoru Odpovědět 6.6.2012 18:36
Avatar
David Jančík [sczdavos]
Tým ITnetwork
Avatar
Odpovídá na matesax
David Jančík [sczdavos]:6.6.2012 18:38

Jestli ti něco nefunguje tak ti rád pomůžu problém vyřešit :)
BTW: Jak edit? Cože? :D

Nahoru Odpovědět 6.6.2012 18:38
Čím více času dostaneš, tím méně ho máš.
Avatar
matesax
Redaktor
Avatar
Odpovídá na David Jančík [sczdavos]
matesax:6.6.2012 18:41

Akoráte s tou pozicí si nerozumíme - potřebuji nějaký event - který zaznemená změnu pozice. Jenže když použiji event LocationChanged (či tak nějak), tak mi to vezme úplně všechny pozice - ne jen tu poslední - když byl form již program položen/ukotven. Proto jsem to dal do mouse up - vezmeto aktuální pozici pouze po akci mouse up - tedy to byla moje myšlenka - jenže to nefunguje. Nechápu proč. proto jsem se ptal tebe - jaký event bych měl použít,...

 
Nahoru Odpovědět 6.6.2012 18:41
Avatar
matesax
Redaktor
Avatar
Odpovídá na David Jančík [sczdavos]
matesax:6.6.2012 18:43

No jo - pardon,... Sám nevím - co se mu nelíbilo - tvému kódu rozumím a proto jsem se na to vykašlal - určitě by šlo o nějaký nedopisek. Nyní bych chtěl dořešit již jen tu pozici,...

 
Nahoru Odpovědět 6.6.2012 18:43
Avatar
David Jančík [sczdavos]
Tým ITnetwork
Avatar
Odpovídá na matesax
David Jančík [sczdavos]:6.6.2012 18:44

Šak tam máš výpis v Output při změně pozice.

private void Form2_MouseDown(object sender, MouseEventArgs e)
        {
            if ((e.Button == MouseButtons.Left) && (e.Clicks != 2))
            {
                ReleaseCapture();
                SendMessage(Handle, WM_NCLBUTTONDOWN, HT_CAPTION, 0);
            }
            Debug.WriteLine(this.Left + "x" + this.Top);// při změně pozice se vypíše do Output (to debug okýnko dole) souřadnice
        }
Nahoru Odpovědět 6.6.2012 18:44
Čím více času dostaneš, tím méně ho máš.
Avatar
matesax
Redaktor
Avatar
Odpovídá na David Jančík [sczdavos]
matesax:6.6.2012 18:48

A je to správný zápis (který pak mohu použít do this.Location)?

 
Nahoru Odpovědět 6.6.2012 18:48
Avatar
David Jančík [sczdavos]
Tým ITnetwork
Avatar
Odpovídá na David Jančík [sczdavos]
David Jančík [sczdavos]:6.6.2012 19:01

Left je souřadnice od levého okraje parent Formu a Top pak od horního.

Nahoru Odpovědět 6.6.2012 19:01
Čím více času dostaneš, tím méně ho máš.
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 36 zpráv z 36.