C# kezdő

Fórumok

Sziasztok!

Ez egy alacsonyan leszedhető gyümölcs lesz annak aki eléri, biztosan elég sokan lesznek.

C#-ban van két form-om. Form1-en egy textbox egy meghatározott alapértékkel, amit egy gomb megnyomásával át akarok küldeni a másik form-nak. A gomb lenyomásának pillanatában de még a .ShowDialog() előtt, direkt ki is a bárki által begépelt értéket (TextChanged event), csakhogy a másik form-on mikor létrehozom az új form1 object-et akkor hivatkozva az 1-es formon a textbox datára a form1-nek az alapértékét írja ki.

A form1-en jó a változtatott data mert ezt ki is iratom, a form2-re viszont mégis az alapértelmezett kerül át.

Azon tanakodtam hogy a new object egy újat hoz létre a form1-ből ami miatt mégis ugye az alapértéket kapom meg - ez logikus is lenne. Hogyan lehetne a form1-en belül létrehozni az object-et amit átadnék épp aktuális datával a form2-nek?

Köszi.

Hozzászólások

Mondanám, hogy mutass kódot, de sejtem, illetve a kérdésed alapján te is rájöttél, hogy a két form *példány* között kell adatot cserélni. A form2-n hiába csinálsz egy új form1-et, ezt nagyon gyorsan felejtsd el.

Tipikusan a Form2 konstruktor várjon egy paramétert: public Form2(string valami) {}. A Form1 pedig így hívja meg: new Form2(textbox1.Text).ShowDialog(). Ha több adatcsere kell, akkor a Form1 átadhatja saját magát (this), a Form2 pedig egy Form1 típusú paramétert vár, és beszélgethetnek egymással ide-oda.

--

Szerintem tedd ki valahova a kódot (ha nem ipari titok).
Sokkal könnyebben kitaláljuk, mi a hiba.

Fuszenecker Róbert

Ez szerintem ebben az esetben a dolgok túlkomplikálása.

Eleve, mivel showdialog()-al nyitja a form2-t, valószinű nem is kell folyamatosan szinkronizálni form1->form2 irányban (hiszen nem is tud a form1-en matatni a user amig nyitva van a form2), igy felesleges event-ekkel bohóckodni, bőven elég fejesjoco által irt technika, hogy konstruktorban átadod a form2-nek a string-et és kész.

(más kérdés, hogy a másik ajánlott megoldás (a form1 példányának átadása) okozhat gondokat, az eventek nem fognak lefutni amit a form2-n adsz hozzá. Ha folyamatos szinkron kell form1->form2 irányban, akkor érdemesebb fenntartani form1-en egy változóban a példányt a nyitott form2-ből és a form1.textbox.textchanged event-ben átirni a form2-n lévő textbox text-jét. Ehhez persze public-ká kell tenni a form2.textbox-ot, vagy bevezetni egy külön property-t stb-stb)

majd valami c# guru kijavit.

a form2-n a textbox modifiers property-jet tedd at publicra.
amikor meg nyomod a gombot valami ilyen kod kell.


Form f = new Form2();
f.ottanitestboxneve.Text = ittenitextboxneve.Text;
f.ShowDialog();

--
A vegtelen ciklus is vegeter egyszer, csak kelloen eros hardver kell hozza!

Így nem kell a textBox1-nek publicnak lennie:


    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        public Form1(string text):this()
        {
            textBox1.Text = text;
        }

        private void button1_Click(object sender, EventArgs e)
        {
            Form1 f = new Form1(textBox1.Text);
            f.ShowDialog();
        }
    }