Minulla on ohjelma, jossa on monta formia. Login formi, päävalikkoformi ja monta formia, joihin pääsee päävalikkoformin kautta. Kuitenkin kun yritän jotenkin saada login formin tekstikenttien tiedot käyttöön muissa formeissa, niin jostakin kumman syystä se ei tee sitä. Esim. jos yritän messagebox.show:lla katsoa osaako se hakea loginformin tekstikentistä tietoa jossakin muussa formissa, niin se näyttää vain tyhjää.
Tekstikenttien näkyvyysaluemääre on varmaankin private
. Tee formille jokin getterimetodi, joka palauttaa tekstikentän sisällön.
textbox on autogeneroitu Private TextBox TextBox1 (tai mikä nimi sitten onkaan) = new TextBox, eli privaattina.
muuta tämä public:ksi
voit muuttaa sitä formin autogeneroidusta tiedostosta mistä kaikkien Dragndrop controllit löytyy (eli controllien ja eventtien luonnit),ei siis esim Form1.cs vaan Form1.Designer.cs
jos muutat vaikka form2:sella sijaitsevan textbox2:sen public:si Form2.Designer.cs tiedostosta, voit käpistellä sitä Form1:sessä.
Form2 MyForm = new Form2(); MyForm.TextBox2.Text = "Jotain";
Laitoin kaikki publiciksi, mutta eipä tuo näytä tekstiä näyttävän....
Jotenkin tuntuu, että olet tehnyt jonkin perustavanlaatuisen virheen, jota emme ehkä kyselemällä saa selville. Esimerkiksi groovyb:n koodista tuli mieleeni, että et kai vain vahingossa luo aina uutta formia siellä, missä yrität käyttää dataa? :)
Se voi olla siitä kiinni. Miten saisi fiksusti tehtyä tuon systeemin? Jos olisi jossakin esimerkkikoodi, jossa on 2 formia ja edellisestä otetaan textboxin tiedot ja näytetään seuraavassa formissa tjsp. Ilmeisesti siis on väärin tehdä aina uusi formi ja käyttää tietoja siellä? Nyt se ei kyllä näytä mitään.
Tämä on siis loginformissa:
public void buttonLogin_Click(object sender, EventArgs e) { Valikko vali = new Valikko(); vali.Show(); //this.Hide(); } public void buttonCancel_Click(object sender, EventArgs e) { Application.Exit(); } public string kirjautumistiedot() { return textBoxUsername.Text; }
Tota kirjautumistiedot funktiota oon koittanut käyttää valikko formissa, mutta se ei palauta mitään. Pelkkää tyhjää.
Mod. lisäsi kooditagit
Pystyisitkö antamaan tiedot eteenpäin funktiossa buttonLogin_Click?
Valikko vali = new Valikko(textBoxUsername.Text); // Tai: vali.asetaTiedot(textBoxUsername.Text);
tässä esimerkki jos käytössä Form1 ja Form2
Form2.Designer.cs
//Täällä on autogeneroitu tavara kyseiselle formille private TextBox TextBox1 = new TextBox(); //Tämä public:si TextBox1.Size = new etc.etc.etc.
Form1.cs
namespace Esimerkki { public partial class Form1 : Form { public Form1() { InitializeComponent(); } public static Form2 MyForm = new Form2(); //Luodaan Form2:sta olio bool Form2Created; //Form2:sen tilatieto private void Form1_Load(object sender, EventArgs e) //Form1_Load event { Form2Created = false MyForm.FormClosed += new FormClosedEventHandler(Form2_Closed); //luodaan eventti jotta saadaan selville milloin Form2 on suljettu } private void button1_Click(object sender, EventArgs e) //Napin Button1_Click event { if(!Form2Created) { MyForm.Show(); /form2 näkyviin Form2Created = true; } } private void button2_Click(object sender, EventArgs e) //Napin Button2_Click event { AssignText(textbox1.text); //eli siirretään Form1:sen textbox1:sen teksti Form2:sen textbox1.textiin } private void AssignText(string text) //Tekstiä form2:sen textboxiin { MyForm.TextBox1.Text = text; } private void Form2_Closed(object sender, FormClosedEventArgs e) //Jos suljetaan niin asetetaan tilatieto false:ksi { Form2Created = false; } }
Tämä kuuluu sarjaan testaamattomat notepad viritykset, mutta eiköhän tuo idea selviä kuitenkin ;)
Aihe on jo aika vanha, joten et voi enää vastata siihen.