Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: C# ja textbox päivitys

Sivun loppuun

Aki_26 [01.04.2013 19:01:09]

#

Terve,

Osaisiko joku auttaa alla olevassa ongelmassa. Kielenä C# ja ohjelmisto Microsoft Visual Studio 2010.

Ohjelmassa on käytössä graffinen käyttöliittymä (Form1) ja muita luokkia, joita kutsutaan Form1:stä. Haluan muutta Form1:ssä olevan textbox1:n arvoa luokasta jota kutsutaan Form1:stä. Miten tämä onnistuu? En halua toteuttaa tätä metodin palautuksen kautta. Tarkoituksena on pyörittää for-silmukkaa luokassa jota kutsutaan Form1:stä ja päivittää tiedot jokaisella kierroksella Form1:ssä olevaan textbox:n (monirivisyys käytössä). Jos selvitys epäselvä, tarkennan asiaa kysyttäessä.

-Aki

Metabolix [01.04.2013 19:10:23]

#

Anna tekstilaatikko metodille parametrina, niin voit suoraan vaihtaa sen tekstiä.

Aki_26 [01.04.2013 19:47:28]

#

Kiitos vastauksesta. Voisitko hieman tarkentaa miten tuo onnistuu?

-Aki

groovyb [01.04.2013 22:24:16]

#

public class MyFancyTextChangingClass
{
   public void ChangeText(TextBox textBox, string text)
   {
       textBox.Text = text;
   }
}

//far, far away in another galaxy
private void SomeButtonOnForm1_Click(object sender, EventArgs e)
{
    MyFancyTextChangingClass MFTCC = new MyFancyTextChangingClass();
    MFTCC.ChangeText(TextBox1,"New Text should appear to textbox");
}

Aki_26 [23.04.2013 17:48:20]

#

Niin miten tuon pitäsi toimia? En kyllä saa tuolla konstilla textbox:n päivitystä toimimaan.

-Aki

ajv [23.04.2013 18:10:37]

#

No pistäppä tänne vähän sitä sun koodia näkyviin, niin väännetään rautalangasta :)

Aki_26 [23.04.2013 18:52:09]

#

Koodi on sen verran pitkä, että en viitsi laittaa tänne. Laitoin pienen mallin, toivottavasti ymmärrät siitä tarkoitukseni.

Aliluokka on luokka, jota on tarkoitus kutsua Form1:stä. Käytän Form1 multiline textboxia ja haluaisin aliluokassa olevan for-silmukan päivittävän tiedon textboxiin jokaisella kierroksella. Ei tuntunut onnistuva metodin return palautuksen kautta, kun metodin käsittely loppuu, kun tullaan return kohtaan.

FORM1:

namespace Pääohjelma
{
    public partial class Form1 : Form	//Form, jossa myös textbox1 sijaitsee
    {
        public Form1()
        {
            InitializeComponent();
        }

	Laskuri L = new Laskuri();

        private void button1_Click(object sender, EventArgs e)	//Painike, jolla for silmukka käyntiin
        {
	    L.palauta();
        }
    }
}


LUOKKA:

namespace Laskuri
{
    class Luokka_2
    {
        public void palauta()
        {
            for (int i = 0; i <= 5; i++)
            {
                //Jokaisella kierroksella palautettava arvo esim. i päivitettäisiin textbox1:n

            }

         }

    }
}

ajv [23.04.2013 19:30:38]

#

No tässä toimiva koodi.

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

        Luokka_2 L = new Luokka_2();

        private void button1_Click(object sender, EventArgs e)	//Painike, jolla for silmukka käyntiin
        {
            L.palauta(textBox1);
        }
    }

    class Luokka_2
    {
        public void palauta(TextBox textBox)
        {
            for (int i = 0; i <= 5; i++)
            {
                textBox.Text = i.ToString();

            }
        }

    }
}

Edit: Eli sulla nimiavaruudet (namespace) ja luokat (class) mennyt vähän sekasin. Pistin noi nyt samaan nimiavaruuteen, osannet sen muuttaa omiin tarpeisiisi sopivaksi

Aki_26 [24.04.2013 10:15:11]

#

Kiitos ajv! Näinhän se toimiin, sekoitin pikkasen asioita. Osaisitko sanoa miten tuolta namespacesta pääsee viittaamaan esim. textboxiin?

Korjaan toisen namespacen nimeksi (Laskuri -> Pääohjelma). Haluasin viitata Luokka_2 palauta metodiin Form1:stä (Pääohjelma.Luokka_2.palauta(teksti);). Ohjelma ei löydä palauta() metodia, vaan antaa virhe ilmoituksen. Onko tuo viittaus tapa oikea. Molemmissa namespaceissa on using.System;

Grez [24.04.2013 10:53:09]

#

Aki_26 kirjoitti:

Kiitos ajv! Näinhän se toimiin, sekoitin pikkasen asioita. Osaisitko sanoa miten tuolta namespacesta pääsee viittaamaan esim. textboxiin?

En nyt ihan älyä mitä kysyt. TextBox on määritelty namespacessa System.Windows.Forms, mutta tietenkin jos viittaat johonkin Textboxin esiintymään, niin siihen viitataan sen sisältävän olion kautta ko. textboxin nimellä.

Eli esim jos sulla on muuttujassa f se oikea formi ja siellä on tekstilaatikko Textbox1, niin: f.Textbox1

Aki_26 kirjoitti:

Korjaan toisen namespacen nimeksi (Laskuri -> Pääohjelma). Haluasin viitata Luokka_2 palauta metodiin Form1:stä (Pääohjelma.Luokka_2.palauta(teksti);). Ohjelma ei löydä palauta() metodia, vaan antaa virhe ilmoituksen. Onko tuo viittaus tapa oikea. Molemmissa namespaceissa on using.System;

Ei sellaista namespacea olekaan kuin using.System. Oletan, että tarkoitat että olet määritellyt molemmissa using System, joka siis tarkoittaa että voit kirjoittaa System nimiavaruuden alta löytyvät viittaukset ilman että kunkin viittauksen alussa lukee System.

Miten se sun palauta -metodi on määritelty?

Kyllä tuo esittämäsi Pääohjelma.Luokka_2.palauta(teksti); onnistuu ihan hyvin, jos se määrittely vaan on yhteensopiva. Esim:

namespace Pääohjelma
{
    public class Luokka_2
    {
        public static void palauta(string teksti) {
        }
    }
}

Jos nyt vika on tuossa määrittelyssä niin älä vaan suoraan kopioi siihen tuota rimpsua (public static void) vaan selvitä ensin itsellesi mitä mikin niistä tarkoittaa.

Aki_26 [24.04.2013 14:57:30]

#

Nyt hokaisin asia, vihdosta viimein!

Kiitos Grez myös kommenteista. Tämä on loistava sivusto, kun aina joku auttaa kun on ongelmia!


Sivun alkuun

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta