Hinnavaatlus
:: Foorum
:: Uudised
:: Ärifoorumid
:: HV F1 ennustusvõistlus
:: Pangalink
:: Telekavad
:: HV toote otsing
|
|
autor |
|
etk
HV kasutaja

liitunud: 10.10.2006
|
04.12.2009 19:46:35
Windows Forms Aplication ja c++ |
|
|
Hei, siia alafoorumisse satun oma muredega esimest korda aga loodan abi saada
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 ).
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 |
|
 |
mesilased
HV kasutaja
liitunud: 31.07.2004
|
04.12.2009 19:52:34
|
|
|
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 |
|
 |
inzinz
HV kasutaja
liitunud: 26.01.2005
|
04.12.2009 20:41:57
|
|
|
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 |
|
 |
etk
HV kasutaja

liitunud: 10.10.2006
|
04.12.2009 21:41:14
|
|
|
inzinz, tänud sellest seletusest oli palju abi
lootsin ise ka, et on midagi lihtsamat kui eventid ja delegate aga ei tulnud sellise lähenemise peale. Algaja asi
Tänud, proovin tööle saada
|
|
Kommentaarid: 44 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
42 |
|
tagasi üles |
|
 |
mesilased
HV kasutaja
liitunud: 31.07.2004
|
07.12.2009 20:37:40
|
|
|
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
|
|
Kommentaarid: 9 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
8 |
|
tagasi üles |
|
 |
inzinz
HV kasutaja
liitunud: 26.01.2005
|
11.12.2009 16:39:05
|
|
|
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 |
|
 |
mesilased
HV kasutaja
liitunud: 31.07.2004
|
13.12.2009 05:48:27
|
|
|
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
|
|
Kommentaarid: 9 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
8 |
|
tagasi üles |
|
 |
|
lisa lemmikuks |
|
|
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
|
|