Diskuze: C# WFA Zrušení User Control

C# .NET .NET (C# a Visual Basic) C# WFA Zrušení User Control American English version English version

Avatar
GunSpawn
Redaktor
Avatar
GunSpawn:

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
Redaktor
Avatar
GunSpawn:

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
Redaktor
Avatar
GunSpawn:

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:

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

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
Redaktor
Avatar
GunSpawn:

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:

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í
+1 bodů
Řešení problému
 
Nahoru Odpovědět  +1 27.12.2014 22:25
Avatar
GunSpawn
Redaktor
Avatar
Odpovídá na sadlomaslox25
GunSpawn:

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:

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

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:

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  +1 28.12.2014 19:32
Avatar
GunSpawn
Redaktor
Avatar
Odpovídá na sadlomaslox25
GunSpawn:

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:

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  +1 28.12.2014 19:45
Avatar
GunSpawn
Redaktor
Avatar
Odpovídá na sadlomaslox25
GunSpawn:

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.