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

C# .NET .NET (C# a Visual Basic) C# Nefunguje volání metody z jiné třídy American English version English version

Avatar
Dortík
Člen
Avatar
Dortík:

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
Redaktor
Avatar
Odpovídá na Dortík
Petr Nymsa:

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  +2 21.8.2015 11:26
Pokrok nezastavíš, neusni a jdi s ním vpřed
Avatar
vodslon
Člen
Avatar
Odpovídá na Dortík
vodslon:

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  +1 21.8.2015 11:54
Avatar
Dortík
Člen
Avatar
Odpovídá na Petr Nymsa
Dortík:

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:

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í
+1 bodů
Řešení problému
 
Nahoru Odpovědět 21.8.2015 13:51
Avatar
Dortík
Člen
Avatar
 
Nahoru Odpovědět 21.8.2015 13:55
Avatar
vodslon
Člen
Avatar
Odpovídá na Dortík
vodslon:

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.