Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.
Avatar
GunSpawn
Tvůrce
Avatar
GunSpawn:25.12.2014 15:52

Zdravím všechny,
udělal jsem menu, které se vykresluje pomocí User Control, kde také kontroluju, co se zmáčkne a potom už v hlavním Formu reaguju v metodě na danou akci. Ale když zmáčknu tlačítko, tak když použiji UserControl.Hide(); a hned na to volám další metodu (pojmenuju jí pro tento případ NewMethod, ať v tom není zmatek), tak sice UserControl zmizí, ale ta nová metoda nic nevykreslí i když by měla. Nevíte, kde mám chybu. Za odpověď předem děkuji. S pozdravem GunSpawn.

Takhle to zatím vypadá.
case ...:
{
UserControl.Hide();
NewMethod();
break;
.
.
.
}
private void NewMethod()
{
PictureBox newPB = new PictureBox();
Bitmap b = new Bitmap(...);

newPB.Size = new Size(20,20);
newPB.Image = b;
}

Editováno 25.12.2014 15:53
Odpovědět
25.12.2014 15:52
Save early, save often, save everything, everywhere, everytime.
Avatar
GunSpawn
Tvůrce
Avatar
GunSpawn:25.12.2014 17:12

Anebo by to šlo ještě tak, že bych tam nechal to menu a otvíral jen nový Formy, ale to se mi pak zas z neznámýho důvodu otevře ten Form2 2x.
Form2 f = new Form2();
f.Show();

Nahoru Odpovědět
25.12.2014 17:12
Save early, save often, save everything, everywhere, everytime.
Avatar
GunSpawn
Tvůrce
Avatar
GunSpawn:25.12.2014 18:10

blbost, na to vlastně budu taky potřebovat zrušit ten UserControl

Nahoru Odpovědět
25.12.2014 18:10
Save early, save often, save everything, everywhere, everytime.
Avatar
Odpovídá na GunSpawn
sadlomaslox25:25.12.2014 22:21

neznam cely kod ani co je WFA ale kod:

PictureBox newPB = new PictureBox();
Bitmap b = new Bitmap(...);

newPB.Size = new Size(20,20);
newPB.Image = b;

nedava smysl protoze PictureBox je komponenta a ta neni nikde "zobrazena"

 
Nahoru Odpovědět
25.12.2014 22:21
Avatar
GunSpawn
Tvůrce
Avatar
Odpovídá na sadlomaslox25
GunSpawn:26.12.2014 11:05

WFA = Windows Forms Application
ten problém s tím pictureboxem už jsem vyřešil, ale pořád potřebuju zjistit, jak danej form uzavřít.Co se kódu týče,tak tady je.
http://leteckaposta.cz/794369122

Nahoru Odpovědět
26.12.2014 11:05
Save early, save often, save everything, everywhere, everytime.
Avatar
GunSpawn
Tvůrce
Avatar
GunSpawn:27.12.2014 8:53

A jaktože, když dám isClicked na false, stejně se mi otevře to okno a když zavolám TestRuneM, zavřu MessageBox ručně a pak zavolám NewRuneM, tak se mi nejdřív otevře znova MessageBox a pak teprve daný Form? Funguje to i obráceně. Za odpověď předem děkuji.

private void ChooseYourAction(availableActions a)
        {
            switch(a)
            {
                case availableActions.NewRune:
                    isClicked = true;
                    a = availableActions.Nothing;
                    NewRuneM();
                    break;
                case availableActions.TestRune:
                    a = availableActions.Nothing;
                    TestRuneM();
                    break;
                case availableActions.ShowRune:
                    a = availableActions.Nothing;
                    break;
                case availableActions.Exit:
                    Application.Exit();
                    break;
            }
        }



        private void TestRuneM()
        {
            Random generateRune = new Random();
            runeList[1] = 1;
            runeList[32] = 5;
            MessageBox.Show(runeList[32].ToString());
            //generateRune.Next(runeList);
        }

        private void NewRuneM()
        {
            if(isClicked == true)
            {
                NewRune f = new NewRune();
                isClicked = false;
                f.Show();
            }
        }
Nahoru Odpovědět
27.12.2014 8:53
Save early, save often, save everything, everywhere, everytime.
Avatar
Odpovídá na GunSpawn
sadlomaslox25:27.12.2014 22:25

Form se ti otevira 2x protoze mas 2x registrovany event handler na "Menu" MouseClick (jedenkrat v designeru a podruhe v konstruktoru)

Program se ti nezavira protoze mas spatne poradi v "MsClick" nejdriv musis zjitit co se ma stat a az pak to provest. Ted to mas naopak.

Dalsi vec je ze Random mej jen jednu instanci po celou dobu kdy ti bezi program.

A taky ArrayList se uz nepouziva protoze byl nahrazeny List<>.

Akceptované řešení
+20 Zkušeností
+2,50 Kč
Řešení problému
 
Nahoru Odpovědět
27.12.2014 22:25
Avatar
GunSpawn
Tvůrce
Avatar
Odpovídá na sadlomaslox25
GunSpawn:28.12.2014 19:07

Nějak jsem nepochopil co je na tom špatně, mohl by si mi to prosímtě lépe objasnit.

private void MsClick(object sender, MouseEventArgs e)
       {
           ChoosedAction(choosAction);

           if (RctAddRune.Contains(e.Location))
           {
               choosAction = availableActions.NewRune;
           }
           else if(RctTestRune.Contains(e.Location))
           {
               choosAction = availableActions.TestRune;
           }
           else if(RctShowRune.Contains(e.Location))
           {
               choosAction = availableActions.ShowRune;
           }
           else if (RctExit.Contains(e.Location))
           {
               choosAction = availableActions.Exit;
           }
           this.Invalidate();
       }
Nahoru Odpovědět
28.12.2014 19:07
Save early, save often, save everything, everywhere, everytime.
Avatar
Odpovídá na GunSpawn
sadlomaslox25:28.12.2014 19:18

no pokud ctu spravne tak metoda(event) ChoosedAction spusti obsluhu udalosti vyvolane tim ze uzivatel nekam kliknul. metoda je zalozena na datech v promene choosAction, avsak data jsou do teto promene ulozena az po provedeni metody ChoosedAction, takze se vlastne nikdy nestane to co by si uzivatel pral :).

 
Nahoru Odpovědět
28.12.2014 19:18
Avatar
GunSpawn
Tvůrce
Avatar
Odpovídá na sadlomaslox25
GunSpawn:28.12.2014 19:27

tak jsem z toho udělal tohle a furt nic, buď jsem úplně blbej nebo mi to cukroví leze na mozek :)

private void MsClick(object sender, MouseEventArgs e)
        {
           if (RctAddRune.Contains(e.Location))
            {
                choosAction = availableActions.NewRune;
            }
            else if(RctTestRune.Contains(e.Location))
            {
                choosAction = availableActions.TestRune;
            }
            else if(RctShowRune.Contains(e.Location))
            {
                choosAction = availableActions.ShowRune;
            }
            else if (RctExit.Contains(e.Location))
            {
                choosAction = availableActions.Exit;
            }
            ChoosedAction(choosAction);
            this.Invalidate();
        }
Nahoru Odpovědět
28.12.2014 19:27
Save early, save often, save everything, everywhere, everytime.
Avatar
Odpovídá na GunSpawn
sadlomaslox25:28.12.2014 19:32

a co presne ti teda nejde ?

po uprave co jsi tu ted postoval musi fungovat zavreni aplikace ale furt to bude otevirat 2 okna. ty 2 okna to otevira protoze
"mas 2x registrovany event handler na "Menu" MouseClick (jedenkrat v designeru a podruhe v konstruktoru)"

 
Nahoru Odpovědět
28.12.2014 19:32
Avatar
GunSpawn
Tvůrce
Avatar
Odpovídá na sadlomaslox25
GunSpawn:28.12.2014 19:35

dík, tak jsem jenom slepej
a jakej je rozdíl mezi ArrayList a List<> ?

Editováno 28.12.2014 19:36
Nahoru Odpovědět
28.12.2014 19:35
Save early, save often, save everything, everywhere, everytime.
Avatar
Odpovídá na GunSpawn
sadlomaslox25:28.12.2014 19:45

napr. http://stackoverflow.com/…t-in-c-sharp

zjednodusene receno je to to same stim rozdilem ze do jedne instance arraylistu nacpes vsecko jako napr. objekty, int cisla, doule cisla, stringy. zatimco do listu muzes nacpat jen to co je v te ostre zavorce. Kdyz mas List<int> tak tam muzes nacpat jen int kdyz List<string> tak jen stringy. Vyhodu to ma zaprve v tom ze to eliminuje chyby protoze vetsinou chces do jednoho arraylistu cpat jen jeden druh objektu. Druha vyhoda je vyhoda z hlediska vykonu pokud list obsahuje instance typu int/double/float z duvodu boxingu/unboxingu ktery neni u listu narozdil od arraylistu potrebny.

 
Nahoru Odpovědět
28.12.2014 19:45
Avatar
GunSpawn
Tvůrce
Avatar
Odpovídá na sadlomaslox25
GunSpawn:28.12.2014 19:51

dík, budu se tím řídit

Nahoru Odpovědět
28.12.2014 19:51
Save early, save often, save everything, everywhere, everytime.
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 14 zpráv z 14.