Stránka 1 z 1

Visual Studio C# - form1 a form2 komunikace

Napsal: 29 bře 2016 21:45
od kimi999
Zdravím,

mám menší problém, potřeboval bych aby mezi sebou komunikoval form1 a form2.
Ve form2 potřebuji aby šlo zobrazit (pouze zobrazit, žádný zápis apod.) jedno dvourozměrné pole a jedna int proměnná.
Ve form1 jsem nastavil proměnnou i pole jako "public", díky tomu vidím na form2 všechno co potřebuji.

Problém nastává ve chvíli, kdy na form1 cokoliv změním a chci se na to podívat přes form2, všechny data to bere jako základní, co jsem dal ještě do kódu a mnou změněná data ignoruje.

Např. form1 je v kódu nastavená promennaXY = 1, během běhu programu ji změním na 3, ale když ji chci zobrazit na form2, zobrazí se opět 1 (i když při krokování vidím na form1 stále 3).

Kód: Vybrat vše

namespace Zkouska
{
    public partial class form2 : Form
    {

        Form1 fm1 = new Form1();

       

        public form2()
        {
            InitializeComponent();

            label1.Text = fm1.promennaXY;

        }
    }
}



Budu vděčný za všechny rady.

Re: Visual Studio C# - form1 a form2 komunikace

Napsal: 29 bře 2016 22:23
od Eldan
To bude proto, že máš dvě instance form1, jednu základní, která existuje jen pro form2 a druhou která je ta "správná".
Konkrétní chybu bych ti ukázal kdybys postl celý kód (jakože i ten form1).

Jak to fixnout: předpokládám, že form2 od někud inicializuješ. Tak mu přidej parametr do konstruktoru, kterým předáš referenci na form1 a přes kterou k němu pak budeš přistupovat. Asi takhle:

Kód: Vybrat vše

Form1:
--------------
Form form2;
public static string textProLabel = "";
private void startForm2() {
   this.form2 = new Form2(this);
   this.form2.Show();
}


Form2:
--------------
Form _parent;
public Form2(Form parent) {
   this._parent = parent;
   this.label1.Text = _parent.textProLabel;
}