Avaleht
uus teema   vasta Tarkvara »  Programmeerimine »  C# - nõu vaja kahe klassiga märgi kõik teemad loetuks
märgi mitteloetuks
vaata eelmist teemat :: vaata järgmist teemat
Hinnavaatlus :: Foorum :: Uudised :: Ärifoorumid :: HV F1 ennustusvõistlus :: Pangalink :: Telekavad :: HV toote otsing
autor
sõnum Saada viide sõbrale.  :: Teata moderaatorile teata moderaatorile
otsing:  
b88
HV kasutaja
b88

liitunud: 27.01.2004




sõnum 14.08.2008 15:16:02 C# - nõu vaja kahe klassiga vasta tsitaadiga

Postitan siin lühema variandi koodist, mida ma ei oska õieti tööle panna.

button1_Click - seal on siis action, mille peale oleks vaja, et see asi töötaks ( formTeg.tee2ra(); ) - kasutaks teise klassi funktsiooni.

Esimene:

namespace WindowsApplication1
{
    public partial class Form1 : Form
    {
        Tegutse formTeg = new Tegutse();

        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            this.muuda = "akdsskdl";  // <-see toimib
            formTeg.tee2ra();         // <-ei tööta
        }

        public String muuda
        {
            set
            {
                textBox1.Text = value;
            }
        }
    }
}


Teine:

namespace WindowsApplication1
{
    class Tegutse
    {
        public void tee2ra()
        {
            Form1 form = new Form1();
            form.muuda = "see peaks ilmuma textBox1.Text -i";
        }
    }
}


Milles võib viga olla? textbox1 on private vms, et mujalt muuta ei saa?
Kommentaarid: 16 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 15
tagasi üles
vaata kasutaja infot saada privaatsõnum
i8080
Kreisi kasutaja
i8080

liitunud: 15.03.2002



Autoriseeritud ID-kaardiga

sõnum 14.08.2008 19:08:33 vasta tsitaadiga

minuarust sul on juba olemas Form1 ja sa tekitad uue Form1 ja see uus on alguses vist hidden staatuses ja seal ei saagi seda tekstboksi sisu näha olla.

1. pigemini peaksid ehk seal kuidagi olemasoleva Form1 viida this abil ehk kaasa panema või
2. tegema mingi avaliku staatilise muutuja, mille kaudu sellele Form1 ligipääseb.
3. või siis kui jah tahad iga kliki peale uut Form1 kuvada, siis lisa ka peale form = new Form1(); mingi form.Show(); vist oli siuke meetod...
Kommentaarid: 169 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 151
tagasi üles
vaata kasutaja infot saada privaatsõnum mine selle kasutaja kodulehele
ref
Kreisi kasutaja

liitunud: 10.08.2003




sõnum 14.08.2008 19:14:44 Re: C# - nõu vaja kahe klassiga vasta tsitaadiga

näiteks nii:

namespace WindowsApplication1
{
    public partial class Form1 : Form
    {
        Tegutse formTeg = new Tegutse();

        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            this.muuda = "akdsskdl";
            formTeg.tee2ra(this);
        }

        public String muuda
        {
            set
            {
                textBox1.Text = value;
            }
        }
    }
}


Teine:

namespace WindowsApplication1
{
    class Tegutse
    {
        public void tee2ra(Form1 vorm)
        {
            vorm.muuda = "see peaks ilmuma textBox1.Text -i";
        }
    }
}


Umbes nii äkki, kasutades sick1 ideid icon_wink.gif võimalik, et meetodi muutujasse vaja lisada veel julmalt ette, et tegemist pointeriga (public void tee2ra( ref Form1 vorm)), aga minu mälu järgi polnud seda vist vaja
Kommentaarid: 17 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 15
tagasi üles
vaata kasutaja infot saada privaatsõnum
EvilOne
HV vaatleja
EvilOne

liitunud: 25.01.2004




sõnum 14.08.2008 21:57:06 vasta tsitaadiga

ma ei saa üldse aru hetkel, et miks sa seda asja kahe klassiga lahendada soovid?

ühe klassiga oleks ju palju lihtsam ja kuna mõlemad objektid asuvad samas formis, siis pole mõtet eraldi klassi selle jaoks tegema hakata.

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

        private void MuudaTeksti(string text)
        {
            textBox1.Text = text;
        }

        private void button1_Click(object sender, EventArgs e)
        {
            MuudaTeksti("test");
        }
    }




Või kui tahad kangest kahe klassiga teha, siis oleks variant järgmine:

public partial class Form1 : Form
    {
        private Tegutse t;
        public Form1()
        {
            InitializeComponent();

            t = new Tegutse();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            textBox1.Text = t.Tee2ra("Muutsin teksti ära");
        }
    }


Teine klass näeks välja selline:

public class Tegutse
    {
        public string Tee2ra(string text)
        {
            return text;
        }
    }


Ära kunagi objekt-orienteeritud progemises aja segi GUI koodi muu koodiga st. püüa need asjad eraldi hoida. Siis on endal lihtsam ja ükski asi pole sõltuvuses. Kui muudad näiteks klassi Tegutse, siis ei ole ohtu, et GUI kood selle all kannataks. Selles suhtes esimene koodinäide on isegi halb. Kui vaadata kasutaja ref näidet, siis uuesti teises klassis vormi Form1 initsialiseerimine võtab lisaressurssi ja koormab mõttetult programmi tööd.

Loodan, et said aru, mis mõtlesin.
Kommentaarid: 3 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 3
tagasi üles
vaata kasutaja infot saada privaatsõnum
tolm
HV kasutaja
tolm

liitunud: 01.01.2005




sõnum 15.08.2008 00:11:59 vasta tsitaadiga

hetkel ilma kompilaatorist läbi laskmata arvaks, et teemaalgataja poolt pakutud viisil ei saa programm puhtloogiliselt töötada - tehakse tegutseja, tegutseja sisse form, mille sisse omakorda form.. lõpuks hakkab kas gc otsast objekte kustutama või visatakse mõni exception.

c#:
  1.  
  2. namespace WinApp
  3. {
  4.         public partial class Form1 : Form
  5.         {
  6.                 private Tegutseja m_Tegutseja;
  7.  
  8.                 public Form1() { InitializeComponent(); }
  9.                 private void button1_Click(object sender, EventArgs e)
  10.                 {
  11.                         Tekst = "button1 vajutati";
  12.                         if (m_Tegutseja != null) m_Tegutseja.Tee("tegutseja tervitab");
  13.                 }
  14.  
  15.                 public void SeaTegutseja(Tegutseja t)
  16.                 {
  17.                         m_Tegutseja = t;
  18.                 }
  19.                 public string Tekst
  20.                 {
  21.                         get { return textBox1.Text; }
  22.                         set { textBox1.Text; }
  23.                 }
  24.         }
  25. }
  26.  


c#:
  1.  
  2. namespace WinApp
  3. {
  4.         public class Tegutseja
  5.         {
  6.                 private Form1 m_Form;
  7.  
  8.                 public Tegutseja (Form1 f)
  9.                 {
  10.                         m_Form = f;
  11.                 }
  12.  
  13.                 public void Tee (string tekst)
  14.                 {
  15.                         if (m_Form != null) m_Form.Tekst = tekst;
  16.                 }
  17.         }
  18. }
  19.  


Form1 teed nagu form1 ikka, tegutsejad pead eraldi looma, tegutsejat või formi ilma olemasoluta ei kutsuta, näiteks:

c#:
  1.  
  2. namespace WinApp
  3. {
  4.         static class Program
  5.         {
  6.                 [...]
  7.                 static void Main ()
  8.                 {
  9.                         [...]
  10.                         Form1 form = new Form1();
  11.                         form1.SeaTegutseja(new Tegutseja(form));
  12.                         Application.Run(form);
  13.                 }
  14.         }
  15. }
  16.  


sedaviisi ei tekitata mitte lõpmatu hunnik forme ja tegutsejaid, vaid mõlemad räägivad üksteisega enam-vähem oo-viisil (kindluse mõttes võid ref-keywordid argumentidesse panna)
Kommentaarid: 12 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 12
tagasi üles
vaata kasutaja infot saada privaatsõnum
b88
HV kasutaja
b88

liitunud: 27.01.2004




sõnum 15.08.2008 20:26:45 vasta tsitaadiga

Tänud teile asjalike vastuste eest icon_smile.gif
Kommentaarid: 16 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 15
tagasi üles
vaata kasutaja infot saada privaatsõnum
näita postitusi alates eelmisest:   
uus teema   vasta Tarkvara »  Programmeerimine »  C# - nõu vaja kahe klassiga
[vaata eelmist teemat] [vaata järgmist teemat]
 lisa lemmikuks
näita foorumit:  
 ignoreeri teemat 
sa ei või postitada uusi teemasid siia foorumisse
sa ei või vastata selle foorumi teemadele
sa ei või muuta oma postitusi selles foorumis
sa ei või kustutada oma postitusi selles foorumis
sa ei või vastata küsitlustele selles foorumis
sa ei saa lisada manuseid selles foorumis
sa võid manuseid alla laadida selles foorumis



Hinnavaatlus ei vastuta foorumis tehtud postituste eest.