praegune kellaaeg 16.06.2025 15:54:49
|
Hinnavaatlus
:: Foorum
:: Uudised
:: Ärifoorumid
:: HV F1 ennustusvõistlus
:: Pangalink
:: Telekavad
:: HV toote otsing
|
|
autor |
|
b88
HV kasutaja

liitunud: 27.01.2004
|
14.08.2008 15:16:02
C# - nõu vaja kahe klassiga |
|
|
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 |
|
 |
i8080
Kreisi kasutaja

liitunud: 15.03.2002
|
14.08.2008 19:08:33
|
|
|
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 |
|
 |
ref
Kreisi kasutaja
liitunud: 10.08.2003
|
14.08.2008 19:14:44
Re: C# - nõu vaja kahe klassiga |
|
|
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 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 |
|
 |
EvilOne
HV vaatleja

liitunud: 25.01.2004
|
14.08.2008 21:57:06
|
|
|
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 |
|
 |
tolm
HV kasutaja

liitunud: 01.01.2005
|
15.08.2008 00:11:59
|
|
|
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#:
|
namespace WinApp { public partial class Form1 : Form { private Tegutseja m_Tegutseja; public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { Tekst = "button1 vajutati"; if (m_Tegutseja != null) m_Tegutseja.Tee("tegutseja tervitab"); } public void SeaTegutseja(Tegutseja t) { m_Tegutseja = t; } public string Tekst { get { return textBox1.Text; } set { textBox1.Text; } } } }
|
c#:
|
namespace WinApp { public class Tegutseja { private Form1 m_Form; public Tegutseja (Form1 f) { m_Form = f; } public void Tee (string tekst) { if (m_Form != null) m_Form.Tekst = tekst; } } }
|
Form1 teed nagu form1 ikka, tegutsejad pead eraldi looma, tegutsejat või formi ilma olemasoluta ei kutsuta, näiteks:
c#:
|
namespace WinApp { static class Program { [...] static void Main () { [...] Form1 form = new Form1 (); form1. SeaTegutseja(new Tegutseja (form )); Application.Run(form); } } }
|
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 |
|
 |
b88
HV kasutaja

liitunud: 27.01.2004
|
15.08.2008 20:26:45
|
|
|
Tänud teile asjalike vastuste eest
|
|
Kommentaarid: 16 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
15 |
|
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
|
|
Hinnavaatlus ei vastuta foorumis tehtud postituste eest.
|