Stránka 1 z 2
Přenos proměnných C# ve VS
Napsal: 05 bře 2013 17:20
od kimi999
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.
Re: Přenos proměnných C# ve VS
Napsal: 05 bře 2013 17:51
od CZechBoY
Zdravím,
tak si tu proměnnou vlož do nějaký statický třídy, pak k ní bude jen jedna cesta
Re: Přenos proměnných C# ve VS
Napsal: 05 bře 2013 20:34
od kimi999
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.
Re: Přenos proměnných C# ve VS
Napsal: 05 bře 2013 20:36
od CZechBoY
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;}
}
Re: Přenos proměnných C# ve VS
Napsal: 05 bře 2013 20:53
od kimi999
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.
Re: Přenos proměnných C# ve VS
Napsal: 05 bře 2013 21:05
od CZechBoY
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
Re: Přenos proměnných C# ve VS
Napsal: 05 bře 2013 22:04
od kimi999
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

Re: Přenos proměnných C# ve VS
Napsal: 05 bře 2013 22:54
od CZechBoY
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());
}
}
Re: Přenos proměnných C# ve VS
Napsal: 06 bře 2013 09:27
od kimi999
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 (7.44 KiB) Zobrazeno 869 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.
Re: Přenos proměnných C# ve VS
Napsal: 06 bře 2013 09:48
od CZechBoY
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;
}
}
Re: Přenos proměnných C# ve VS
Napsal: 06 bře 2013 10:16
od kimi999
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;
}
}
}
Re: Přenos proměnných C# ve VS
Napsal: 06 bře 2013 10:29
od CZechBoY
jojo ještě musíš dát public class tovarna namísto private
nevim proč, ale jinak to nefunguje