Stránka 1 z 1

C# - zobrazení okna v náhodné pozici

Napsal: 29 bře 2012 18:12
od tux
Hoj, dělám si menší blbost v C# a potřebuju poradit.
Udělal sem si jednoduchou funkci která mi po kliknutí na jedno tlačítko zobrazí několikrát jedno okno

Kód: Vybrat vše

        private void button1_Click(object sender, EventArgs e)
        {
           

                     for (int i = 1; i <= 100; i++)
         {
             var f = new Form2();
             f.Show();
         }
         Console.ReadLine();
         }

A potřebuju nějak udělat že ty okna vyskáčou na obrazovce náhodně, v pozici okna (Start position) žádnej random není, je tam akorát těch 5 (manual, centerscreen,..)
Tak jestli to jde nějak udělat, nebo to udělat přímo editací kódu,.. v C# jsem zatím noob tak nevim.

Jo a jde do toho kódu nějak přidat něco aby se mi to otevírání těch formů zdrželo třeba o 100 ms? Jako mezi sebou, aby mi tam nenaskočilo všechno "hned".

Re: C# - zobrazení okna v náhodné pozici

Napsal: 29 bře 2012 20:20
od domitea
Je třída Random a Form má vlastnost Top a Left . Na to postupné je vhodný Timer, který má metodu tick, která se provede po určitém intervalu.

V kódu musí být Form f = new Form2();

Re: C# - zobrazení okna v náhodné pozici

Napsal: 29 bře 2012 21:17
od tux
Ok, absolutně nevim co si tady právě napsal :lol:
Nechceš mi to udělat? Celej projekt máš tady:
Nový WinRAR archiv.rar
(43.01 KiB) Staženo 13 x

Ten timer dělat nemusíš, až se to budu ve škole učit tak to zkusim sám.

Jinak jak přejmenuju popis tý aplikace ve správci procesů?

A malej postřeh, když ten výslednej *.exe program přejmenuju na svchost.exe, změněj se tlačítka na klasickej styl. Proč?

Re: C# - zobrazení okna v náhodné pozici

Napsal: 29 bře 2012 21:59
od domitea
Tak jinak. K tomu, aby jsi získal nějaké náhodné číslo existuje pod .NETem třída Random a ta se deklaruje:

Kód: Vybrat vše

Random rnd = new Random();


a náhodné číslo z ní získáš metodou Next, která může brát dva parametry. Minimum a maximum, neboli rozlišení daného displeje, kde max. hodonota bude poslední pixel displeje. A pak Form. Ten má vlastnosti Top a Left. Ty můžeš využít!

Kód pak může vypadat následovně:

Kód: Vybrat vše

// použiju rozlišení displeje 1366x768
Form1.top = rnd.Next(0, 768);
Form1.left = rnd.Next(0, 1366);


A co je zajímavější, tak tahle zákl. vlastnosti mají všechny komponenty Windows Form, takže kód bude identický jak pro form, tak button, nebo třeba DataGrid, jen se místo Form1 dá něco jiného. :wink:

Takže pak výsledný kód může vypadat přibližně:

Kód: Vybrat vše

private void button1_Click(object sender, EventArgs e)
        {
            Random rnd = new Random();
Form2 f = new From2();
f.top = rnd.Next(0, 768);
f.left = rnd.Next(0, 1366);
f.show();
        }


A to je vše, už žádný readline, který je jen do konzole!

Re: C# - zobrazení okna v náhodné pozici

Napsal: 29 bře 2012 22:13
od tux
Ok, nechceš mi to udělat a upnout to sem? Abych se mohl vzdělávat podle toho, teď vůbec nevim co kam psát :-D
A pokud to spustim na monitoru s jiným rozlišením tak se stane co? V případě většího se to na okraji nebude zobrazovat a v případě menšího budou Formy skákat mimo monitor? :-D
Jinak to s tim readline sem našel tady, sám bych na to nijak nepřišel. -> http://projektysipvz.gytool.cz/Projekty ... aspx?uid=3

Re: C# - zobrazení okna v náhodné pozici

Napsal: 29 bře 2012 22:18
od domitea
Snad vidíš, kde v případě potřeby rozlišení upravit :wink: , navíc tam nepočítám s tím, že left bude na 1366, to by pak form nebyl vidět, takže jak se to vyřeší? :idea:

Readline se týká jen konzole a ty příklady taky :wink:

Re: C# - zobrazení okna v náhodné pozici

Napsal: 29 bře 2012 22:29
od tux
Hele, já nejsem žádnej programátor, vim akorát to co jsem se naučil za dva měsíce ve škole a to co jsem našel na netu takže vůbec nevim jakou řečí tady na mě mluvíš (píšeš), resp. rozumim ale nechápu.
Takže:

Nevidim.
Nevim.
Co?

:lol:

Nemůžeš to prostě udělat tak jak to má bejt a pak to sem upnout? Mě když člověk neukazuje "tohle smaž", "tady napiš tohle" tak nevim :lol: