Zugriff auf Objekte

bocian

Grünschnabel
Wie kann man auf elemente einer Form zb Textbox zugreifen wenn mann noch weiter formen hat Form2 Form3 Form4.

Ich will dies aber über eine Klasse machen.

Meine Vorstellung


Class objektzugriff
{
private Form1 frm1;
private Form2 frm2;
private Form3 frm3;



public objektzugriff(Form formular,int formularid)
{
switch ( formularid)
{
case 1:
this.frm1=formular;
break;
case 2:
this.frm2=formular;
break;
case 3:
this.frm3=formular;
break;

}

public void setze_tboxformular1(int formularid)
{

switch/formualrid)
{
case 1:
frm1.textBox1.Text="hallo";
case 2:
frm2.textBox1.Text="hallo";
case 3:
frm3.textBox1.Text="hallo";


}

}


jetzt deklariere ich in Form 2 folgendes das heist wenn ich button drücke in form 2 so soll in form1 hallo in textbox1 stehen geht leider nicht
private objektzugriff obj;
dann in dem bereich
private void button1_click(...)
{
this.obj=new objektzugriff(form1,1);
obj.setze_tboxformular1();
}


nur leider gehts nicht
kann mir einer mal ein beispiel machen.



habe viel im forum gelesen aber es bezieht sich nur auf eine form..

Bei VB6 war alles so einfach leider muß ich umsteigen auf c#.

Besten Dank

Herrmann
 
Üblicherweise entwirft man für jede From eine eigene Klasse und lässt diese dann die Verwaltung ihrer Controls übernehmen. Zugriff ist dann nur über Methoden der Form (ihr Interface) möglich.

Man kann natürlich die Controls public machen; dann ist ein Zugriff von aussen möglich. Allerdings führt das schnell zu sehr unübersichtlichen Programmen.
 
Hallo

Für jede Form eine eigene klasse.

aber wie komme ich dann von Form2 wenn ich einen Button drücke auf das Textfeld von Form1

gibt es irgendwo ein beispielprogramm zum downloaden


Gruß

Herrmann
 
Hallo bocian,

das schöne am C# ist ja das wirklich alles ein Objekt ist,
Also auch Form1, Form2 etc.
Du kannst els also auch an ein anderes Objekt übergeben (z.B. an Form2)

du kannst dann in Form2 ganz normal auf deine Textboxen etc. zugreifen.

Bsp. Form1.Textbox1.Text = "bla";
oder: string test = Form1.Textbox1.Text.ToString();
Wenn du deine Form1 nicht abschießt und eine Referenz übergiebst nimmt
übernimmt er die änderungen auch sofort wenn form1 wieder aktiv <-- logisch

bei unklarheiten Post, dann post ich ein ausführliches bsp.

ansonsten viel Spaß
gruß Klobow
 
Hallo

Leider kann ich nicht aus Form2 auf eine Form1 Textbox zugreifen

wenn ich in form2 es so mache wie Du schreibst

Form1.textbox1.text="blavbla".

ICh würde michfreuen wenn Du mir ein BSP..
Es würde reichen wenn es ein bsp ist was 2 Formen hat Form1 und Form2 Form 1 hat eine Textbox und Form 2 ein Button Wenn ich Form2 Butoon drückje soll in Form1 ein Text in der Textbox stehen den ich in Form 2 definiere.

Danke
 
Du musst Dir, wie der Kachelator schon sagte, eine HauptForm/Controlklasse schreiben.
Zusätzlich implementiert Du Interfaces um darüber auf die TextBoxen der Form's zugreifen zu können.

Hauptform/Controlklasse (FormControl)

Form1
Form2
Code:
IFormTextControl frmCtrl = FormControl.GetTextControl;
frmCtrl.SetText( FormID, sText);
Was zum Thema Interfaces.

MFG cosmo

P.S.: Wir haben eine Netiquette ( deine Schreibweise )
 
Zuletzt bearbeitet:
Hallo,

also das geht doch viel einfacher!
Code:
Class Form1:

     Form2 f2 = new Form2(this);
     f2.Show;


Class Form2:

    private Form1 f1;

    public Form2(Form1 _parrent)
    {
       f1 = _parrent;
    }

    public void irgendwas()
    {
        f1.Textbox1.Text = "bla";    //natürlich muss dazu die Textbox1 in Form1 'public' sein!
    }

noch Fragen?
Schick mir deine Emailaddresse als pn, dann schick ich dir ein komplettes Beispielprogramm!

mfg
Klobow
 
Das ist aber nicht "die feine englische Art"!
Und was ist wenn man dynamisch viele Forms hat?
Knallst Du dann deinen Code zum verwalten und ansprechen etwa mit in die Form's hinein?
Ist ja barbarisch.

MFG cosmo
 
Hey cosmoscaosmaker,

klar ist das nicht unbedingt die sauberste Lösung aber
wenn ich nur ein kleines Projekt mit zwei oder drei Forms
habe ist das leicht überschaubar.
Bei größeren Projekten ist das natürlich nicht zu verantworten
geb ich dir recht!

gruß
Klobow
 

Neue Beiträge

Zurück