Avatar
enes.vint
Člen
Avatar
enes.vint:

Ahoj, zase ja. Pripadam si uz hloupe, ze tohle forum porad zneuzivam asi hloupejma dotazama, ale fakt jsem nad tim stravil celej den a uz si nevim rady. O co jde? Mam 2 Formy. Spustim prvni a na event spoustim druhej, pricemz prvni stale bezi. Z prvniho formu si pujcuju 2 promenny (coz se mi uspesne podarilo) a ve druhym formu budu s tema promennyma pracovat. Pri ukonceni druheho formu tlacitkem by melo dojit k presunuti upravenych promennych do prvniho formu a k aktualizaci dat.

Kod pro presouvani promennych z prvniho do druhyho formu:

Prvni form

matchWindow duel = new matchWindow();
duel.passed_duel_charname = charName;
            duel.passed_duel_hp = health;
            duel.ShowDialog();

Druhej form

private string duel_charname;
        public string passed_duel_charname
        {
            get
            {
                return duel_charname;
            }
            set
            {
                duel_charname = value;
            }
        }
        private int duel_hp;
        public int passed_duel_hp
        {
            get
            {
                return duel_hp;
            }
            set
            {
                duel_hp = value;
            }
        }

A vse funguje jak ma. Ted si ale nevim rady s navracenim promennych do prvniho formu...

 
Odpovědět 11.5.2014 16:52
Avatar
rwn
Člen
Avatar
Odpovídá na enes.vint
rwn:

Ty data co si přepíšeš a pošleš zpátky, jsou uložená v Listu? nebo to máš data jen jako private proměnné v prvním formu?

Nahoru Odpovědět 11.5.2014 17:56
Co můžeš naprogramovat dnes, neodkládej na zítřek.
Avatar
enes.vint
Člen
Avatar
enes.vint:

Data, ktera presouvam z prvniho formu do druheho nejsou ulozena v listu, jsou to obycejne promenne, ktere pak druhy form upravi. Potrebuji dostat tyto upravena data zase zpatky z form2 do form1 a zaktualizovat je.

 
Nahoru Odpovědět 11.5.2014 17:59
Avatar
rwn
Člen
Avatar
Odpovídá na enes.vint
rwn:

Tak můžeš to udělat třeba tak, že si ve Formu2 uděláš metodu, která bude vracet string popřípadě int té nové hodnoty.
Potom ve Form1 budeš jen volat onu metodu, co ti vrátí hodnotu z Form2

matchWindow duel = new matchWindow();
charName = duel.MetodaVracejiciNovyCharName();
health = dual.MetodaVracejiciNovyHealrt();
duel.ShowDialog();

Přičemž ony metody ve Form2 mohou vypadat třeba takto:

public int duel_hp()
{
    duel_hp += 5; //nějaká změna
    return duel_hp;
}

A hodnoty co si posíláš do Form2, tak si to pošli spíš takto:

matchWindow duel = new matchWindow(charName, health);

Přičemž ve form2 budeš takto brát parametry:

private string duel_charname;
private int passed_duel_hp;

public matchWindow(string charName, int health)
{
    InitializeComponent();
    this.duel_charname = charName;
    this.passed_duel_hp = health;
}

Snad je to zrozumitelné. :)

Nahoru Odpovědět 11.5.2014 18:48
Co můžeš naprogramovat dnes, neodkládej na zítřek.
Avatar
enes.vint
Člen
Avatar
enes.vint:

V tvorbe metod se moc neorientuju, ale jdu to zkusit, diky za tip :)

 
Nahoru Odpovědět 11.5.2014 19:02
Avatar
rwn
Člen
Avatar
Odpovídá na enes.vint
rwn:

Tímto způsobem se dá zeptat na jakýkoliv parametr ve form2, který se ti následně uloží do proměnné health

health = dual.MetodaVracejiciNovyHealrt();

Jinak jsem tam měl překlep, ten název metody by měl být:

public int MetodaVracejiciNovyHealrt()
{
     duel_hp += 5; //nějaká změna
     return duel_hp;
}

Aby název odpovídal volající metodě.

Nahoru Odpovědět  +1 11.5.2014 19:09
Co můžeš naprogramovat dnes, neodkládej na zítřek.
Avatar
enes.vint
Člen
Avatar
enes.vint:

To ano, ale do jakeho eventu to mam dat? Potreboval bych nejakou detekci zavreni Formu2, ale to je takove krkolomne...

 
Nahoru Odpovědět 11.5.2014 19:16
Avatar
rwn
Člen
Avatar
Odpovídá na enes.vint
rwn:

Tak teoreticky bys to mohl udělat obráceně. Před zavřením Form2 se zavolá metoda, která data z Form2 pošle do metody z Form1 a ta si je nastaví pro celý Form1.

Nahoru Odpovědět 11.5.2014 19:21
Co můžeš naprogramovat dnes, neodkládej na zítřek.
Avatar
enes.vint
Člen
Avatar
enes.vint:

Tak jsem to zkusil pres metody ve Form2 a nasledne zavolani metod na stisknuti mezerniku a bohuzel nefunkcni, asi je to tim, ze s metodama moc nepracuju...

 
Nahoru Odpovědět 11.5.2014 19:33
Avatar
rwn
Člen
Avatar
Odpovídá na enes.vint
rwn:

Udělej si metodu ve Form1, která přepíše ony parametry ve Form1. Tahle metoda, by se zavolala před zavřením Form2 a měla by v sobě parametry, které chceš přepsat ve Form1.
Zkus si možná pročíst nějaké tutoriály zde na stránkách. Metody jsou úplný základ programování. :)

Nahoru Odpovědět 11.5.2014 19:43
Co můžeš naprogramovat dnes, neodkládej na zítřek.
Avatar
enes.vint
Člen
Avatar
enes.vint:

Tak jsem to zkusil takhle, bohuzel bez vysledku, data ve Form1 se porad nemeni... Jdu na to spravne?

Form1

public int health_rewrite()
        {
            health = duel.hp_method();
            return health;
        }

Form2

public int hp_method()
        {
            output_charHp = char_hp;
            return output_charHp;
        }

        public bool result_method()
        {
            output_result = result;
            return output_result;
        }

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

        private void matchWindow_FormClosing(object sender, FormClosingEventArgs e)
        {
            Form1 Form1 = new Form1();
            Form1.health_rewrite();
        }
 
Nahoru Odpovědět 11.5.2014 19:57
Avatar
Gramli
Redaktor
Avatar
Odpovídá na enes.vint
Gramli:

Do konstruktoru Form2 si dej vstupni promenou typu Form a tou pak inicializuj deklarovany form1, pak můžeš pracovat s proměnýma z Form1

Nejak takto:

Form1 form1; // deklarace promene ve tride Form2

public Form2(Form form) //konstruktor Form2
{
   form1 = form;
}
//form closing
private void matchWindow_FormClosing(object sender, FormClosingEventArgs e)
         {
             form1.health_rewrite();
         }

no a kdyz si ve Form1 vztváříš proměnou

Form2 form2 = new Form2(this) // promena ve Form1

, dáš mu do konstruktoru vstupní hodnotu formulář Form1

Doufám, že je to pochopitelné :)

Editováno 11.5.2014 20:08
Nahoru Odpovědět 11.5.2014 20:07
Kdo to říká ten to je...
Avatar
enes.vint
Člen
Avatar
Odpovídá na Gramli
enes.vint:

Diky, ale to jsem vubec nepobral, promin.

 
Nahoru Odpovědět 11.5.2014 20:10
Avatar
Gramli
Redaktor
Avatar
Odpovídá na enes.vint
Gramli:

Co takhle:
Form1

namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        Form2 form2; // deklaruju promenou form2

        public Form1() // konstruktor form1
        {
            InitializeComponent();
            label1.Text = "Text"; // mam ve formu1 label s textem> "Text"
        }

        private void button1_Click(object sender, EventArgs e) // kdyz kliknu na tlacitko, inicializuju promenou form2 a zobrazim form2
        {
            form2 = new Form2(this);
            form2.Show();
        }
        public void PrepisLabel(string text) // metoda pro prepsani textu v label1
        {
            label1.Text = text;
        }
    }
}

Form2

namespace WindowsFormsApplication1
{
    public partial class Form2 : Form
    {
        Form1 form1;// deklaruju promenou form1
        public Form2(Form1 form) // konstruktor Form2
        {
            InitializeComponent();
            form1 = form; // inicializace form1
        }

        private void Form2_FormClosing(object sender, FormClosingEventArgs e)
        {
            form1.PrepisLabel("Zavrel jsem form 2 a pracuju s promenou formu1"); //kdyz zaviram form2 volam metodu pro prepis labelu
        }

    }
}

Jesstli chces poslu ti tu ukazku :)

Editováno 11.5.2014 20:24
Nahoru Odpovědět 11.5.2014 20:24
Kdo to říká ten to je...
Avatar
enes.vint
Člen
Avatar
enes.vint:

Ukazku bych ocenil, moc dekuju.

 
Nahoru Odpovědět 11.5.2014 20:42
Avatar
Gramli
Redaktor
Avatar
Nahoru Odpovědět  +2 11.5.2014 20:45
Kdo to říká ten to je...
Avatar
enes.vint
Člen
Avatar
enes.vint:

Diky moc, pres noc to prostuduju a zitra dam vedet.

 
Nahoru Odpovědět 11.5.2014 21:00
Avatar
enes.vint
Člen
Avatar
enes.vint:

Takze jsem to prozkousel a dopadl jsem takto: u eventu FormClosing volam metodu, ale chce to po me parametry. Zkusim jsem Form1.health_rew­rite(char_hp);, podari se spustit ale ve vysledku spadne, protoze: "Odkaz na objekt není nastaven na instanci objektu."...

 
Nahoru Odpovědět 12.5.2014 13:57
Avatar
Gramli
Redaktor
Avatar
Odpovídá na enes.vint
Gramli:

Musis mit deklarovany Form1 v konstruktoru Form2,

Editováno 12.5.2014 14:15
Nahoru Odpovědět 12.5.2014 14:14
Kdo to říká ten to je...
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 19 zpráv z 19.