Avaleht
uus teema   vasta Tarkvara »  Programmeerimine »  Windows Forms Aplication ja c++ 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:  
etk
HV kasutaja
etk

liitunud: 10.10.2006




sõnum 04.12.2009 19:46:35 Windows Forms Aplication ja c++ vasta tsitaadiga

Hei, siia alafoorumisse satun oma muredega esimest korda aga loodan abi saada icon_smile.gif
Nimelt üritan teha väikest Windows Forms programmi kasutades c++ ning sooviksin saata infot mitme formsi vahel.
Ehk siis mul on põhi Form(Form1 nt) millelt ma kutsun välja teise Formi(Form2 nt) ja ma sooviksin Form2-le sisestatud info tagastada Form1-le aga ei suuda mitte välja mõelda kuidas.
Guugeldades leidsin mõned seletused .NET kohta kus kasutati delegate-sid mis ajasid juhtme liiga kokku kuna ei saanud neist aru ja tööle ka ei saanud(ilmselgelt kui juhtme kokku ajasid icon_biggrin.gif).

Siit siis ka huvi, et kas keegi oskaks seletada, anda vihjeid vms, et kuidas saaks saata andmeid mitme form akna vahel.
Kommentaarid: 44 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 42
tagasi üles
vaata kasutaja infot saada privaatsõnum
mesilased
HV kasutaja

liitunud: 31.07.2004




sõnum 04.12.2009 19:52:34 vasta tsitaadiga

Kasuta .NET evente. Ehk siis viska Form2-st event v2lja ja pyya see Form1-s kinni. Kui tahad teada lihtsalt mida vajutati ja syndmusega lisandmeid ei kaasnenud, ei pea ka uut delegate-i ilmtingimata defineerima.
Kommentaarid: 9 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 8
tagasi üles
vaata kasutaja infot saada privaatsõnum
inzinz
HV kasutaja

liitunud: 26.01.2005




sõnum 04.12.2009 20:41:57 vasta tsitaadiga

Miks jännata delegatede ja muude asjadega kui on hoopis oluliselt lihtsam lahendus, mis pseudokoodis näeks välja nii:

class Form2 : Form {
   public String muutuja1;
  //muud muutujad ja funcid
}
class Form1 : Form {
  public void showForm() {
     Form2 f = new Form2();
     f.showDialog();
     String test = f.muutuja1;
  }
}


Samas stiilis võid Form2 klassile lihtsalt mingi funktsiooni teha ,mis vastavalt mingile loogikale posu väärtuseid tagasi annab massiivina vms.
Oluline on just see, et form1 koodi seest peab saama ligi mõnele Form2 public muutujale või meetodile, kuskohast siis väärtuseid kätte saaks.
Või teistpidi tehes, kui tahad et form2 miski tegevuse (nuu kliki) peale pandaks väärtused form1 sisse, pead andma form1 muutuja ette form2'le, näiteks nii:

class Form2 : Form {
   private Form1 parent;
   public Form2(Form1 parent) {
      this.parent = parent;
   }
   public String muutuja1;
  //muud muutujad ja funcid
  public void nupuklikk() {
     parent.teemidagi("123");
  }
}
class Form1 : Form {
  public void showForm() {
     Form2 f = new Form2(this);
     f.showDialog();
  }
  public void teemidagi(String val) {
     //tee midagi sisse antud stringiga
  }
}


Ei mingit raketiteadust spets eventidega jms, lihtsalt üks form peab olema teadlik teise olemasolust mingitpidi, et siis otse andmeid edasi anda...

_________________
Upload.ee - eestimaine failiupload
Kommentaarid: 4 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 4
tagasi üles
vaata kasutaja infot saada privaatsõnum
etk
HV kasutaja
etk

liitunud: 10.10.2006




sõnum 04.12.2009 21:41:14 vasta tsitaadiga

inzinz, tänud icon_biggrin.gif sellest seletusest oli palju abi icon_biggrin.gif
lootsin ise ka, et on midagi lihtsamat kui eventid ja delegate aga ei tulnud sellise lähenemise peale. Algaja asi icon_razz.gif

Tänud, proovin tööle saada icon_biggrin.gif
Kommentaarid: 44 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 42
tagasi üles
vaata kasutaja infot saada privaatsõnum
mesilased
HV kasutaja

liitunud: 31.07.2004




sõnum 07.12.2009 20:37:40 vasta tsitaadiga

Millist keelt sa siis kasutad, visual C++ voi C#? Eventid ja delegate-d ei ole keerulised ja liikudes suuremate arenduste juurde on neid kohe vaja. Näiteks selline kood ajab ka asja ära:


namespace Test
{
public delegate MinuDelegate(String nimi, int vanus);

class Popup: Form
{
   public event MinuDelegate Sisestatud;

...
...
...

   button_click(Sender s, EventArgs e)
   {
        Sisestatud(nimi, vanus); /// Siin sisestad oma andmed
   }
}

class MainForm: Form
{
  private Popup popuptest;
 
  MainForm()
  {
       ....
       ....
       popuptest = new Popup();
       popuptest.Sisestatud += new MinuDelegate(handler);
       popuptest.Show()
  }

  handler (String nimi, int vanus)
  {
      /// Siit saad andmed kätte
  }

}

}


Tsipa keerulisem näeb vast välja aga eelis seisneb selles et saad ka teistes klassides sisestatud andmeid kasutada (mitte ainult parent formis) ja ei pea sellisel juhul OO kaudu mingit anaali meetodit leiutama icon_smile.gif
Kommentaarid: 9 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 8
tagasi üles
vaata kasutaja infot saada privaatsõnum
inzinz
HV kasutaja

liitunud: 26.01.2005




sõnum 11.12.2009 16:39:05 vasta tsitaadiga

C#'s saab jah niimoodi teha, kuigi võiks tuua välja vea koodis:
Sisestatud(nimi, vanus); asemel peaks olema kontroll if(Sisestatud != null) Sisestatud(nimi, vanus);

Vastasel juhul viskab nullpointerit kui eventi pole ära seotud handleriga.

C++ koha pealt ei oska öelda kuidas seal see delegate süsteem on, kas keerulisem või lihtsam.

_________________
Upload.ee - eestimaine failiupload
Kommentaarid: 4 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 4
tagasi üles
vaata kasutaja infot saada privaatsõnum
mesilased
HV kasutaja

liitunud: 31.07.2004




sõnum 13.12.2009 05:48:27 vasta tsitaadiga

inzinz kirjutas:
C#'s saab jah niimoodi teha, kuigi võiks tuua välja vea koodis:
Sisestatud(nimi, vanus); asemel peaks olema kontroll if(Sisestatud != null) Sisestatud(nimi, vanus);

Vastasel juhul viskab nullpointerit kui eventi pole ära seotud handleriga.



Oli tõesti viga sisse jäänud, kiiruga kirjutasin. Tänud parandamast thumbs_up.gif
Kommentaarid: 9 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 8
tagasi üles
vaata kasutaja infot saada privaatsõnum
näita postitusi alates eelmisest:   
uus teema   vasta Tarkvara »  Programmeerimine »  Windows Forms Aplication ja c++
[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.