"Christmas - the time to fix the computers of your loved ones" « Lord Wyrm

C# : Zugriff auf Klassenvariablen

Master99 13.08.2004 - 14:29 8039 5
Posts

Master99

verträumter realist
Avatar
Registered: Jul 2001
Location: vie/grz
Posts: 12594
Hi Leute, ich weiß, die frage hört sich jetzt recht banal an, aber wenn ich jetzt ne normale Winforms-Anwendung habe (also mit ein paar textboxen, progressbar usw. in der Klasse Form1), wie kann ich dann von einer anderen Klasse den Wert eines Controls ändern bzw. lesen?

die controls die angesprochen werden sind natürlich public& enable und weder gelockt oder ReadOnly...

ich hätt des mit nem klassenkonstruktor versucht, dann komm ich auch auf die (public) controlls und ihre events, aber ich kann weder werte lesen noch ändern.
fehlermeldung bekomm ich auch keine!


Codebeispiel:

Code:
public class Form1 : System.Windows.Forms.Form
{
  public System.Windows.Forms.TextBox TEXTBOXNAME;

  ....
}

public class MDS
{
 public void FUNKTIONSNAME()
 {
   Form1 frm = new Form1();
   frm.TEXTBOXNAME.Text = "Test";

  //bzw. das geht auch nicht:

  MessageBox.Show(frm.TEXTBOXNAME.Text);
 }
}
beide Klassen liegen im selben Namespace...

mhm, :confused:

TIA

murcielago

Dr. Doom
Avatar
Registered: Oct 2002
Location: *
Posts: 2657
erklärs nochmal besser, willst du die form erst erzeugen während der laufzeit oder is form1 dein hauptwindow was schon angezeigt wird? weil wenn ja, dann hilft dir dein new Form1() nix, weil das eine neue instanz anlegt.

Master99

verträumter realist
Avatar
Registered: Jul 2001
Location: vie/grz
Posts: 12594
Form1 ist mein hauptwindow das schon angezeigt wird...

mhm, auf das mit der neuen instanz hab ich gar nicht gedacht... hast natürlich recht!

aber wie greif ich jetzt auf die bestehende controls im form zu?

murcielago

Dr. Doom
Avatar
Registered: Oct 2002
Location: *
Posts: 2657
wenn du aus einer anderen klasse drauf zugreifen willst musst irgendwie eine referenz aufs form1-objekt mitgeben (im konstruktor zB)...

in form1:

Code:
MySubClass cls = new MySubClass(this);

in MySubClass (konstruktur->;):

Code:
public MySubClass(Form1 parent)

dann kannst mit parent.MyTextBox drauf zugreifen.

geht auch mit properties oda wie imma du willst...

Master99

verträumter realist
Avatar
Registered: Jul 2001
Location: vie/grz
Posts: 12594
yuhu... thx!

also ich hab dann in "MySubClass" noch ne variable "parent1" erstellt und die im Konstruktor dann mit der übergabevariable gleichgesetzt, damit man dann von allen classenfunktionen zugriff hat.

also

Code:
public class mySubClass
{
 private Form1 parent1;

 public MySubClass(Form1 parent)
 {
  ...
  parent1 = parent;
 }

 public void FUNKTIONSNAME()
 {
  parent1.XXX.......
 }
}

kann man dass eh so machen oder macht man das anders?

murcielago

Dr. Doom
Avatar
Registered: Oct 2002
Location: *
Posts: 2657
haut scho hin, is zwar ned schön aber bitte ;)

du solltest ned direkt auf die textbox zB zugreifen, besser über methoden oder properties...

zB im form1 hast drin

Code:
public string Username
{
    set { mytextbox.text = value }
    get { return mytextbox.text }
}

und dann kannst im subclass über parent.Username zugreifen. vorteil ist dass du im parent bestimmen kannst was bei einem zugriff passiert.

mfg
Kontakt | Unser Forum | Über overclockers.at | Impressum | Datenschutz