Facebook RSS feed
Avatar
matesax
Redaktor
Avatar
matesax:

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
Avatar
matesax
Redaktor
Avatar
Odpovídá na matesax
matesax:

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

 
Odpovědět 4.6.2012
Avatar
Odpovídá na matesax
David Jančík (sczdavos):

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

Odpovědět 4.6.2012
Čím více času dostaneš, tím méně ho máš.
Avatar
matesax
Redaktor
Avatar
Odpovídá na David Jančík (sczdavos)
matesax:

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í,...

 
Odpovědět 4.6.2012
Avatar
matesax
Redaktor
Avatar
Odpovídá na David Jančík (sczdavos)
matesax:

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

 
Odpovědět 4.6.2012
Avatar
Odpovídá na matesax
David Jančík (sczdavos):

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

Odpovědět 4.6.2012
Čím více času dostaneš, tím méně ho máš.
Avatar
matesax
Redaktor
Avatar
Odpovídá na David Jančík (sczdavos)
matesax:

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,...

 
Odpovědět 4.6.2012
Avatar
Odpovídá na matesax
David Jančík (sczdavos):

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

Odpovědět 4.6.2012
Čím více času dostaneš, tím méně ho máš.
Avatar
matesax
Redaktor
Avatar
Odpovídá na David Jančík (sczdavos)
matesax:

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

 
Odpovědět 4.6.2012
Avatar
matesax
Redaktor
Avatar
Odpovídá na David Jančík (sczdavos)
matesax:

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

 
Odpovědět 4.6.2012
Avatar
Odpovídá na matesax
David Jančík (sczdavos):

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

Odpovědět 4.6.2012
Čím více času dostaneš, tím méně ho máš.
Avatar
matesax
Redaktor
Avatar
Odpovídá na David Jančík (sczdavos)
matesax:

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.

 
Odpovědět 6.6.2012
Avatar
matesax
Redaktor
Avatar
Odpovídá na matesax
matesax:

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

 
Odpovědět 6.6.2012
Avatar
Odpovídá na matesax
David Jančík (sczdavos):

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

Odpovědět 6.6.2012
Čím více času dostaneš, tím méně ho máš.
Avatar
matesax
Redaktor
Avatar
Odpovídá na David Jančík (sczdavos)
matesax:

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,...

 
Odpovědět 6.6.2012
Avatar
Odpovídá na matesax
David Jančík (sczdavos):

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

Odpovědět 6.6.2012
Čím více času dostaneš, tím méně ho máš.
Avatar
matesax
Redaktor
Avatar
Odpovídá na David Jančík (sczdavos)
matesax:

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,...

 
Odpovědět 6.6.2012
Avatar
matesax
Redaktor
Avatar
Odpovídá na David Jančík (sczdavos)
matesax:

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.

 
Odpovědět 6.6.2012
Avatar
Odpovídá na matesax
David Jančík (sczdavos):

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))
Odpovědět 6.6.2012
Čím více času dostaneš, tím méně ho máš.
Avatar
matesax
Redaktor
Avatar
Odpovídá na David Jančík (sczdavos)
matesax:

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

 
Odpovědět 6.6.2012
Avatar
Odpovídá na matesax
David Jančík (sczdavos):

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

Odpovědět 6.6.2012
Čím více času dostaneš, tím méně ho máš.
Avatar
matesax
Redaktor
Avatar
Odpovídá na David Jančík (sczdavos)
matesax:

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

 
Odpovědět 6.6.2012
Avatar
matesax
Redaktor
Avatar
Odpovídá na David Jančík (sczdavos)
matesax:

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.

 
Odpovědět 6.6.2012
Avatar
Odpovídá na matesax
David Jančík (sczdavos):

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...

Odpovědět 6.6.2012
Čím více času dostaneš, tím méně ho máš.
Avatar
matesax
Redaktor
Avatar
Odpovídá na David Jančík (sczdavos)
matesax:

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,...

 
Odpovědět 6.6.2012
Avatar
matesax
Redaktor
Avatar
Odpovídá na David Jančík (sczdavos)
matesax:

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,... :)

 
Odpovědět 6.6.2012
Avatar
Odpovídá na matesax
David Jančík (sczdavos):

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...

Odpovědět 6.6.2012
Čím více času dostaneš, tím méně ho máš.
Avatar
matesax
Redaktor
Avatar
Odpovídá na David Jančík (sczdavos)
matesax:

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.

 
Odpovědět 6.6.2012
Avatar
Odpovídá na matesax
David Jančík (sczdavos):

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. :)

Odpovědět 6.6.2012
Čím více času dostaneš, tím méně ho máš.
Avatar
matesax
Redaktor
Avatar
Odpovídá na David Jančík (sczdavos)
matesax:

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á,...

 
Odpovědět 6.6.2012
Avatar
Odpovídá na matesax
David Jančík (sczdavos):

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

Odpovědět 6.6.2012
Čím více času dostaneš, tím méně ho máš.
Avatar
matesax
Redaktor
Avatar
Odpovídá na David Jančík (sczdavos)
matesax:

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,...

 
Odpovědět 6.6.2012
Avatar
matesax
Redaktor
Avatar
Odpovídá na David Jančík (sczdavos)
matesax:

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,...

 
Odpovědět 6.6.2012
Avatar
Odpovídá na matesax
David Jančík (sczdavos):

Š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
        }
Odpovědět 6.6.2012
Čím více času dostaneš, tím méně ho máš.
Avatar
matesax
Redaktor
Avatar
Odpovídá na David Jančík (sczdavos)
matesax:

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

 
Odpovědět 6.6.2012
Avatar
Odpovídá na David Jančík (sczdavos)
David Jančík (sczdavos):

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

Odpovědět 6.6.2012
Čím více času dostaneš, tím méně ho máš.

 

Zobrazeno 36 z 36 zpráv

Přidat novou zprávu

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řihlaš. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.