Přenos proměnných C# ve VS Vyřešeno

Místo pro dotazy a rady ohledně programovacích jazyků (C++, C#, PHP, ASP, Javascript, VBS..) a tvorby webových stránek

Moderátor: Mods_senior

kimi999
Level 4
Level 4
Příspěvky: 1103
Registrován: duben 11
Pohlaví: Muž
Stav:
Offline

Přenos proměnných C# ve VS

Příspěvekod kimi999 » 05 bře 2013 17:20

Zdravím,

potřeboval bych přenést proměnné mezi dvěma form ve Visual Studiu, ve form1 mám proměnou X, a já bych potřeboval aby se tato proměnná propojila s proměnou Y ve form2 a obě měli stejnou hodnotu a obě se měnili současně z form2. Proměnou X budu mít naplněnou, např. X = 1, a potřeboval bych aby se při otevření form2 proměnná Y taky změnila na 1 a následné editace Y na form2 by vedla i ke změně X na form1.

Děkuji za každou radu.

Reklama
Uživatelský avatar
CZechBoY
Master Level 9.5
Master Level 9.5
Příspěvky: 8813
Registrován: srpen 08
Bydliště: Brno
Pohlaví: Muž
Stav:
Offline
Kontakt:

Re: Přenos proměnných C# ve VS

Příspěvekod CZechBoY » 05 bře 2013 17:51

Zdravím,
tak si tu proměnnou vlož do nějaký statický třídy, pak k ní bude jen jedna cesta
PHP, Nette, MySQL, C#, TypeScript, Python
IntelliJ Idea, Docker, Opera browser, Linux Mint
iPhone XS
Raspberry PI 3 (KODI, Raspbian)
XBox One S, PS 4, nVidia GeForce NOW

kimi999
Level 4
Level 4
Příspěvky: 1103
Registrován: duben 11
Pohlaví: Muž
Stav:
Offline

Re: Přenos proměnných C# ve VS

Příspěvekod kimi999 » 05 bře 2013 20:34

Dobře, tak jsme to zkusil takto:

Kód: Vybrat vše

        private int zamestnanci1;

        public int zamst;

        public tovarna()
        {
            zamestnanci1 = 50000;
        }

        public void prictiZamestnance1()
        {
            zamestnanci1 = zamestnanci1 + zamst;
        }
        public void odectiZamestnance1()
        {
            zamestnanci1 = zamestnanci1 - zamst;
        }
        public int VypisPocetZamst()
        {
            return zamestnanci1;
        }

A dále se snažím vypsat, přičítat a odečítat proměnné

Kód: Vybrat vše

public Tovarna1(Form callingForm)
        {
            InitializeComponent();
            zamestnanci = tv.VypisPocetZamst();
            textBox1.Text = zamestnanci.ToString();
        }

Tohle mi ještě funguje, vypíše proměnnou do textboxu.
Ale už nevím jak to udělat, aby se přičtené a odečtené hodnoty změnili i ve třídě. Sice jsem nějaké řešení vymyslel, ale nikdy po zavření a znovu otevření okna form2 nezůstala proměnná jako před zavřením, ale vrátila se na původních 50000.

Uživatelský avatar
CZechBoY
Master Level 9.5
Master Level 9.5
Příspěvky: 8813
Registrován: srpen 08
Bydliště: Brno
Pohlaví: Muž
Stav:
Offline
Kontakt:

Re: Přenos proměnných C# ve VS

Příspěvekod CZechBoY » 05 bře 2013 20:36

neposlal si cel kod, z tohohle nepoznám v čem je chyba

fígl je v tom, že uděláš statickou metodu a do ní statický vlastnosti
C# píše:public static class nastaveni {
public static int Sirka{get;set;}
public static int Vyska{get;set;}
}
PHP, Nette, MySQL, C#, TypeScript, Python
IntelliJ Idea, Docker, Opera browser, Linux Mint
iPhone XS
Raspberry PI 3 (KODI, Raspbian)
XBox One S, PS 4, nVidia GeForce NOW

kimi999
Level 4
Level 4
Příspěvky: 1103
Registrován: duben 11
Pohlaví: Muž
Stav:
Offline

Re: Přenos proměnných C# ve VS

Příspěvekod kimi999 » 05 bře 2013 20:53

Já to vůbec nevím jak na to :-( jako třídu mám tohle:

Kód: Vybrat vše

namespace Projekt
{
    class tovarna
    {
        private int zamestnanci1;

        public int zamst;

        public tovarna()
        {
            zamestnanci1 = 50000;
        }

        public void prictiZamestnance1()
        {
            zamestnanci1 = zamestnanci1 + zamst;
        }
        public void odectiZamestnance1()
        {
            zamestnanci1 = zamestnanci1 - zamst;
        }
        public int VypisPocetZamst()
        {
            return zamestnanci1;
        }

    }
}

A form kde chci aby vše bylo vypsáno mám takto:

Kód: Vybrat vše

namespace Projekt
{
    public partial class Tovarna1 : Form
    {
        int zamestnanci;

        tovarna tv = new tovarna();

        public Tovarna1(Form callingForm)
        {
            InitializeComponent();
            zamestnanci = tv.VypisPocetZamst();
            textBox1.Text = zamestnanci.ToString();
        }

        private void button3_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            tv.zamst = Convert.ToInt32(numericUpDown1.Value);
            zamestnanci = tv.prictiZamestnance1();  //Error 24 Cannot implicitly convert type 'void' to 'int'
            textBox1.Text = zamestnanci.ToString();
            tv.VypisPocetZamst = zamestnanci;       //Error 25 Cannot assign to 'VypisPocetZamst' because it is a 'method group'

        }

        private void button2_Click(object sender, EventArgs e)
        {
           
        }
    }
}

Jak jsme brali třídy ve škole tak jsem to moc nepobral a teď vážně nevím jak s tím pohnout. Když z toho udělám public static, píše mi to zase jiné chyby.

Uživatelský avatar
CZechBoY
Master Level 9.5
Master Level 9.5
Příspěvky: 8813
Registrován: srpen 08
Bydliště: Brno
Pohlaví: Muž
Stav:
Offline
Kontakt:

Re: Přenos proměnných C# ve VS

Příspěvekod CZechBoY » 05 bře 2013 21:05

uf, to je vcelku špatně :(
v konstruktoru bys měl mít parametr, kterým bys přiřadil základní hodnotu do zamestnanci, toto je takové skryté chování, které nikdo neočekává (pokud to není v zadání, které neznám...)
metoda tovarna.prictiZamestnance1 má návratový typ void (nic nevrací) takže to nemůžeš přiřadit do proměnné - musel bys zavolat tu metodu prictiZamestnance() a potom přiřadit zamestnanci=tv.VypisPocetZamst()
proměnná zamestnanci je v tom formu navíc, používej ty metody/vlastnosti z té třídy tovarna

ta třída Tovarna1 je nejspíš ten druhej form že?
zkus tam dát vzor Form1 (nebo ten hlavní form), můžeš potom zdědit vlastnosti od toho hlavního formu a nemusíš tak zakládat novej objekt tovarna
PHP, Nette, MySQL, C#, TypeScript, Python
IntelliJ Idea, Docker, Opera browser, Linux Mint
iPhone XS
Raspberry PI 3 (KODI, Raspbian)
XBox One S, PS 4, nVidia GeForce NOW

kimi999
Level 4
Level 4
Příspěvky: 1103
Registrován: duben 11
Pohlaví: Muž
Stav:
Offline

Re: Přenos proměnných C# ve VS

Příspěvekod kimi999 » 05 bře 2013 22:04

Tak jsem to zkusil ještě jinak, tady je třída:

Kód: Vybrat vše

namespace Projekt
{
    class tovarna
    {
        private int zamestnanci1;

        public int zamst;

        public tovarna()
        {
            zamestnanci1 = 50000;
            zamst = 0;
        } 
        public int Zamestnanci
        {
            get
            {
                return zamestnanci1;
            }
            set
            {
                zamestnanci1 = value;
            }
        } 

        public int prictiZamestnance1()
        {
            return zamestnanci1 = zamestnanci1 + zamst;
        }
        public int odectiZamestnance1()
        {
            return zamestnanci1 = zamestnanci1 - zamst;
        }


    }
}

Takhle to i funguje, otevřu form, přičtu hodnoty ale když form zavřu a znova otevřu, hodnoty jsou zpátky původní.

Kód: Vybrat vše

namespace Projekt
{
    public partial class Tovarna1 : Form
    {
        int zamestnanci;

        tovarna tv = new tovarna();

        public Tovarna1(Form callingForm)
        {
            InitializeComponent();
            zamestnanci = tv.Zamestnanci;
            textBox1.Text = zamestnanci.ToString();
        }

        private void button3_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            tv.zamst = Convert.ToInt32(numericUpDown1.Value);
            zamestnanci = tv.prictiZamestnance1();
            textBox1.Text = zamestnanci.ToString();
            tv.Zamestnanci = zamestnanci;       
        }

        private void button2_Click(object sender, EventArgs e)
        {
            tv.zamst = Convert.ToInt32(numericUpDown1.Value);
            zamestnanci = tv.odectiZamestnance1();
            textBox1.Text = zamestnanci.ToString();
        }
    }
}

A ano, tovarna1 je form2, potřebuji totiž přejit z form1 na form2, kde upravím tu hodnotu zamestnanci. Tu potom potrebuji si zavolat na form1 pro výpočty, ale editaci potřebuji na form2. Editace sice funguje ale nefunguje to uložení, takže zavřu form2, znova otevřu a je tam zase pořád stejná hodnota jako předtím bez ohledu na editaci. Já tomu pořád nemohu nějak přijít na kloub :-(

Uživatelský avatar
CZechBoY
Master Level 9.5
Master Level 9.5
Příspěvky: 8813
Registrován: srpen 08
Bydliště: Brno
Pohlaví: Muž
Stav:
Offline
Kontakt:

Re: Přenos proměnných C# ve VS

Příspěvekod CZechBoY » 05 bře 2013 22:54

udělej objekt ve formu1 a ten form2 dej jako potomka z form1
pak by mělo jít ve formu2 přistoupit k vlastnostem z formu1 (objekt tovarny)

mě to normálně jde :-)

C# píše: public partial class Form1 : Form
{
public Tovarna tv = new Tovarna();
}

public partial class Form2 : Form1
{

private void button1_Click(object sender, EventArgs e)
{
MessageBox.Show(tv.Zamestnanci.ToString());
}
}
PHP, Nette, MySQL, C#, TypeScript, Python
IntelliJ Idea, Docker, Opera browser, Linux Mint
iPhone XS
Raspberry PI 3 (KODI, Raspbian)
XBox One S, PS 4, nVidia GeForce NOW

kimi999
Level 4
Level 4
Příspěvky: 1103
Registrován: duben 11
Pohlaví: Muž
Stav:
Offline

Re: Přenos proměnných C# ve VS

Příspěvekod kimi999 » 06 bře 2013 09:27

Teď nevím jestli to já správně chápu, mě to funguje, funguje mi přičítání, jenže při zavření form2 se proměnná resetuje na původní nastavení. Zkusil jsem do kódu přidat tohle na form2:

Kód: Vybrat vše

private void button1_Click(object sender, EventArgs e)
        {
            int zamst = Convert.ToInt32(numericUpDown1.Value);
            zamestnanci = tv.Zamestnanci + zamst;
            textBox1.Text = zamestnanci.ToString();
            tv.Zamestnanci = zamestnanci;
            textBox2.Text = tv.Zamestnanci.ToString(); //Tímto si volám proměnnou ze třídy
        }

Potom to na form2 vypadá následovně:
proměnná.png
proměnná.png (7.44 KiB) Zobrazeno 861 x

Původní hodnota je 50 000 a přičítání i odečítání funguje, jenže po zavření a znovu otevření form2 je hodnota opět 50000.

Uživatelský avatar
CZechBoY
Master Level 9.5
Master Level 9.5
Příspěvky: 8813
Registrován: srpen 08
Bydliště: Brno
Pohlaví: Muž
Stav:
Offline
Kontakt:

Re: Přenos proměnných C# ve VS

Příspěvekod CZechBoY » 06 bře 2013 09:48

jojo, jsem si to nevyzkoušel a zkoušel to z hlavy a takhle to dopadlo :(
tak tam dej ten static, s tim mi to funguje

C# píše: public partial class Form1 : Form
{
public static tovarna tv = new tovarna();

public Form1()
{
InitializeComponent();
}

private void button1_Click(object sender, EventArgs e)
{
MessageBox.Show(tv.Zamestnanci.ToString());
}

private void button2_Click(object sender, EventArgs e)
{
new Form2().Show();
}
}


public partial class Form2 : Form
{
public Form2()
{
InitializeComponent();
numericUpDown1.Value = Form1.tv.Zamestnanci;
}

private void numericUpDown1_ValueChanged(object sender, EventArgs e)
{
Form1.tv.Zamestnanci = (int)numericUpDown1.Value;
}
}
PHP, Nette, MySQL, C#, TypeScript, Python
IntelliJ Idea, Docker, Opera browser, Linux Mint
iPhone XS
Raspberry PI 3 (KODI, Raspbian)
XBox One S, PS 4, nVidia GeForce NOW

kimi999
Level 4
Level 4
Příspěvky: 1103
Registrován: duben 11
Pohlaví: Muž
Stav:
Offline

Re: Přenos proměnných C# ve VS

Příspěvekod kimi999 » 06 bře 2013 10:16

Moc děkuji :-)
Každopádně mám ještě jednu chybu a to tuto:
Inconsistent accessibility: field type 'Projekt.tovarna' is less accessible than field 'Projekt.Form1.tv'

Chyba je ve form1 u této části:

Kód: Vybrat vše

public static tovarna tv = new tovarna();

Pochopil jsem to tak, že mám chybu asi ve třídě, ale žádná úprava mi nepomohla, spíše ještě zhoršila.

Kód: Vybrat vše

namespace Projekt
{
    class tovarna
    {
        private int zamestnanci1;
        private int zamestnanci2;
        private int zamestnanci3;
        private int zamestnanci4;

        public int zamst;

        public tovarna()
        {
            zamestnanci1 = 50000;
            zamst = 0;
        } 
        public int Zamestnanci
        {
            get
            {
                return zamestnanci1;
            }
            set
            {
                zamestnanci1 = value;
            }
        } 

        public int prictiZamestnance1()
        {
            return zamestnanci1 = zamestnanci1 + zamst;
        }
        public int odectiZamestnance1()
        {
            return zamestnanci1 = zamestnanci1 - zamst;
        }


    }
}

Uživatelský avatar
CZechBoY
Master Level 9.5
Master Level 9.5
Příspěvky: 8813
Registrován: srpen 08
Bydliště: Brno
Pohlaví: Muž
Stav:
Offline
Kontakt:

Re: Přenos proměnných C# ve VS

Příspěvekod CZechBoY » 06 bře 2013 10:29

jojo ještě musíš dát public class tovarna namísto private
nevim proč, ale jinak to nefunguje
PHP, Nette, MySQL, C#, TypeScript, Python
IntelliJ Idea, Docker, Opera browser, Linux Mint
iPhone XS
Raspberry PI 3 (KODI, Raspbian)
XBox One S, PS 4, nVidia GeForce NOW


  • Mohlo by vás zajímat
    Odpovědi
    Zobrazení
    Poslední příspěvek

Zpět na “Programování a tvorba webu”

Kdo je online

Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 3 hosti