NOVINKA! E-learningové kurzy umělé inteligence. Nyní AI za nejlepší ceny. Zjisti více:
NOVINKA – Víkendový online kurz Software tester, který tě posune dál. Zjisti, jak na to!

Diskuze: C# Nefunguje volání metody z jiné třídy

V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.

Aktivity
Avatar
Tomáš N.
Člen
Avatar
Tomáš N.:21.8.2015 10:56

Zdravím,
nejde mi zavolat funkce ObnovaPenez vždy když spustím program nic se nezmění.

public partial class Main : Form
{
    public Main()
    {
        InitializeComponent();
    }

    public int ObnovaPenez(int minusKolik)
    {
           penize = penize - minusKolik;
           lbl_Penize.Text = penize.ToString();
           return penize;
    }

    void btn_Obchod_Click(object sender, EventArgs e)
    {
           Shop shop = new Shop();
           shop.Show();
    }
}

A v druhé třídě volám tu funkci ObnovaPenez

public partial class Shop : Form
{
        Main csMain = new Main();

        public Shop()
        {
            InitializeComponent();
            csMain.ObnovaPenez(2);
        }

}

Předem Děkuji za odpověď :)

 
Odpovědět
21.8.2015 10:56
Avatar
Petr Nymsa
Tvůrce
Avatar
Odpovídá na Tomáš N.
Petr Nymsa:21.8.2015 11:26

Protože v Shop si vytváříš novou instanci třídy Main. Instanci Main si předej skrz kontruktor, když zakládáš Shop

Nahoru Odpovědět
21.8.2015 11:26
Pokrok nezastavíš, neusni a jdi s ním vpřed
Avatar
vodslon
Člen
Avatar
Odpovídá na Tomáš N.
vodslon:21.8.2015 11:54

Plus tam nemáš privátní člen peníze. Měl by si to mít třeba třídu Pokladna a v ní _stavPenez a Obchod by v příadě prodeje zboží a nebo naopak koupení zboží udělat event zmena v pokladně. A ještě abys to měl pěkné, by se nesmělo stát, že by se nakupovalo zboží, když by v pokladně nic nebylo.

 
Nahoru Odpovědět
21.8.2015 11:54
Avatar
Tomáš N.
Člen
Avatar
Odpovídá na Petr Nymsa
Tomáš N.:21.8.2015 13:05

Děkuju za radu, ale sám to tak napsat neumím :(. Nemohl by jsi zkopírovat můj kód, upravit a hodit ho sem prosím.
P.S.: Vím, že jsem otravnej ale jsem začátečník.

 
Nahoru Odpovědět
21.8.2015 13:05
Avatar
vodslon
Člen
Avatar
vodslon:21.8.2015 13:51

Ahoj, já sem Ti to chtěl ráno poslat, ale nemám už na to čas to dělat, není to uplně správně a je to tak na půl cesty, ale aby si viděl jak to fungovat. Do Formu si dej dva buttony ( Button1 a Button2) dva Textbox jeden label a panel na kreslení, aby si viděl regal.

public partial class Form1 : Form
    {
        Regal r;
        Pokladna pokladna;
        Zbozi z;
        public Form1()
        {
            InitializeComponent();

            pokladna  = new Pokladna(100);
            z = new Zbozi(5);
            r = new Regal(20);

            AktualizaceOkna();

        }



        private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (Char.IsDigit(e.KeyChar))
            {

            }

            else if (e.KeyChar.ToString() == "\b")
            {
                if (textBox1.Text.Length > 0)
                {
                    textBox1.Text.Remove(textBox1.Text.Length - 1);
                }

            }

            else
            {
                // Swallow this invalid key and beep
                e.Handled = true;
                //    MessageBeep();
            }
        }

        private void textBox2_KeyPress(object sender, KeyPressEventArgs e)
        {

            if (Char.IsDigit(e.KeyChar))
            {

            }

            else if (e.KeyChar.ToString() == "\b")
            {
                if (textBox1.Text.Length > 0)
                {
                    textBox1.Text.Remove(textBox1.Text.Length - 1);
                }

            }

            else
            {
                // Swallow this invalid key and beep
                e.Handled = true;
                //    MessageBeep();
            }
        }

        private void button1_Click(object sender, EventArgs e)
        {
            int pocetProdanehoZbozi = Convert.ToInt32(textBox1.Text);
            if (pocetProdanehoZbozi > r._pocetZbozi)
            {
                MessageBox.Show("tolik zobží není ");

            }
            else
            {
                pokladna.ProdaneZbozi(z, pocetProdanehoZbozi);
                r.OdebratZRegalu(pocetProdanehoZbozi);
                AktualizaceOkna();
            }



        }

        private void AktualizaceOkna()
        {
            panel1.Refresh();
            label1.Text = Convert.ToString(pokladna._stavPenez);
        }

        private void button2_Click(object sender, EventArgs e)
        {
            int pocetKoupenehoZbozi = Convert.ToInt32(textBox2.Text);
            pokladna.KoupeneZbozi(z, pocetKoupenehoZbozi);
            r.PridatDoRegalu(pocetKoupenehoZbozi);

            AktualizaceOkna();
        }

        private void panel1_Paint(object sender, PaintEventArgs e)
        {
            int x = 0;
            int y = 0;
            Graphics kp = e.Graphics;
            for (int i = 0; i < r._pocetZbozi; i++)
            {
                if(x >100)
                {
                    x = 0;
                    y += 10;
                }
                kp.DrawRectangle(Pens.Red, x, y, 5, 5);
                x += 10;
            }

        }
    }

    public class Zbozi
    {
        public int _cenaZbozi { private set; get; }

        public Zbozi(int cenaZbozi)
        {
            _cenaZbozi = cenaZbozi;
        }
    }

    public class Pokladna
    {
        public int _stavPenez { private set; get; }

        public Pokladna(int stavPenez)
        {
            _stavPenez = stavPenez;
        }

        public void ProdaneZbozi(Zbozi z, int pocetProdanehoZbozi)
        {
            _stavPenez += z._cenaZbozi * pocetProdanehoZbozi;
        }

        public void KoupeneZbozi(Zbozi z, int pocetProdanehoZbozi)
        {
            _stavPenez -= z._cenaZbozi * pocetProdanehoZbozi;
        }

    }

    public class Regal
    {
        public  int _pocetZbozi { private set; get; }

        public Regal(int pocetZbozi)
        {
            _pocetZbozi = pocetZbozi;
        }

        public void PridatDoRegalu(int pocetZbozi)
        {
            _pocetZbozi += pocetZbozi;
        }

        public void OdebratZRegalu(int pocetZbozi)
        {
            _pocetZbozi -= pocetZbozi;
        }
    }
Akceptované řešení
+20 Zkušeností
+2,50 Kč
Řešení problému
 
Nahoru Odpovědět
21.8.2015 13:51
Avatar
Tomáš N.
Člen
Avatar
Odpovídá na vodslon
Tomáš N.:21.8.2015 13:55

Děkuji moc.

 
Nahoru Odpovědět
21.8.2015 13:55
Avatar
vodslon
Člen
Avatar
Odpovídá na Tomáš N.
vodslon:21.8.2015 14:42

Nemáš vůbec zač, kdyby si chtěl něco poradit nebo se na něco zeptat napiš to sem. Příjdou sem i kolegové, co budou mít lepší nápady než já :)

 
Nahoru Odpovědět
21.8.2015 14:42
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 7 zpráv z 7.