Entwickler-Ecke
WinForms - Funktion aus einem Steuerelement aufrufen
Rassi - Mo 22.12.08 16:57
Titel: Funktion aus einem Steuerelement aufrufen
Hallo.
Ich habe eine Hauptform (Form1). Auf dieser Form ist ein tablelLayoutPanel.
In dieses Panal lade ich, je nach Aufgabe, ein Steuerelement.
Dieses Steuerelement muss aber auf Funktionen der Form1 zugreifen. Diese Funktionen sind auch als public definiert, nur bekomme ich nicht den Zugriff wenn ich aus dem Steuerelement versuche über "Form1.BENOETIGTE_FUNKTION" aufzurufen.
Wie bekomme ich das hin?
Gruß
Rasmus
Christian S. - Mo 22.12.08 17:01
Hallo!
Form1 ist die Klasse, daher wirst Du so nicht auf Instanz-Methoden zugreifen können. Du kannst dem Steuerelement eine Property HostForm : Form1 verpassen, welche Du beim Erstellen des Steuerelements setzt. Dann kannst Du darüber auf die Instanz Deiner Form zugreifen.
Grüße
Christian
JüTho - Mo 22.12.08 17:43
Moment, Christian...
Ich habe mit dem TableLayoutPanel noch nicht gearbeitet, aber das ist doch ein normales Control, das auf einem Formular Form1 liegt, oder? Gehört das TableLayoutPanel dann nicht auch zu den Quelldateien von Form1, nämlich Form1.cs und Form1.Designer.cs, und zur Klasse Form1? Dann hat man doch direkten Zugriff auf die aktuelle Instanz this (und dieses this kann fast immer weggelassen werden).
Oder verstehe ich die Arbeitsweise des TableLayoutPanel falsch?
Jürgen
Rassi - Mo 22.12.08 17:44
Hallo.
Danke für die Antwort. Hast du noch einen Tip, wie ich das mache.
Habe hier mal gesucht, aber nichts gefunden.
Gruß
Rasmus
Christian S. - Mo 22.12.08 17:56
Titel: Re: Funktion aus einem Steuerelement aufrufen
@Jürgen: Ich bin durch nachstehenden Satz davon ausgegangen, dass er dynamisch irgendein Steuerelement erzeugt und dieses nur in dem Panel ablegt. In dem Steuerelement (also in dessen Klasse) will er dann auf Funktionen der Form zugreifen.
Rassi hat folgendes geschrieben : |
In dieses Panal lade ich, je nach Aufgabe, ein Steuerelement. |
So habe ich das zumindest verstanden. Vielleicht kann Rassi das aufklären :-)
@Rassi: Wo kommst Du denn nicht weiter? Eine Property einer Klasse hinzuzufügen gehört ja zu den Grundlagen (sonst bitte im
OPENBOOK C# oder
OPENBOOK VISUAL C# nachschlagen). Oder ist das Steuerelement nicht von Dir geschrieben, dann ist die Aufgabe natürlich schwieriger ;-)
Rassi - Mo 22.12.08 18:48
Hallo.
Ja es ist so, dass ich ein Steuerelement entsprechend den Anforderungen lade.
Auf den entsprechenden Steuerelementen liegen verschiedene Objekte. Vorher waren das verschiedene Reiterseiten. Das will ich jetzt etwas übersichtlicher machen und diese Reiterseiten auf Steuerelemente aufteilen, die dann geladen werden.
Mein Problem ist folgendes umzusetzen:
HostForm : Form1
Ich haben jetzt ein paar Sachen probiert, aber ich bekomme es nicht hin.
Gruß
Rasmus
Christian S. - Mo 22.12.08 18:55
Rassi hat folgendes geschrieben : |
HostForm : Form1 |
Sorry, das war Delphi Prism Syntax, in C# ist es natürlich
Form1 HostForm.
Rassi hat folgendes geschrieben : |
Ich haben jetzt ein paar Sachen probiert, aber ich bekomme es nicht hin. |
Zeig doch mal, wo Du nicht weiter kommst.
Rassi - Mo 22.12.08 19:39
Hallo, und Danke.
Habe einwenig rumgehampelt, bis ich die entsprechenden Deklarationen hatte.
Also wie folgt:
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14:
| public class Anmeldung : UserControl { private Form1 HostForm;
public Form1 hostform { set { HostForm= value; } }
.... } |
Nun kann über "HostForm." auf alles von Form1 zugegriffen werden. Vorher muss aber noch HostForm gesetzt werden.
Das habe ich in der Form1 gemacht über:
C#-Quelltext
1: 2: 3:
| private Anmeldung steuer_Anmeldung = new Anmeldung(); .... steuer_Anmeldung.hostform= this; |
Sorry, dass nicht der originale Quellcode da ist, da ich über den Firmen-Laptop, auf dem ich das VS2008 habe, nicht ins Internet kann.
Nochmal Danke und frohe Weihnachten und einen guten Rutsch ins neue Jahr
Rasmus
Moderiert von
Christian S.: C#-Tags hinzugefügt
Christian S. - Mo 22.12.08 19:59
Japp, so sollte es gehen :-)
Kleiner Hinweis: Normalerweise schreibt man die öffentliche Property groß und das private Feld bekommt den klein geschriebenen Namen.
JüTho - Mo 22.12.08 20:04
Hallo,
vorerst (bis zur nächsten Problembeschreibung) zwei Anmerkungen:
Code kann als solcher markiert werden, das liest sich besser. Danke, Christian.
private Member bekommen üblicherweise kleine Anfangsbuchstaben, die dazugehörige öffentliche Eigenschaft große Anfangsbuchstaben.
Dein "hostForm" ist aber eigentlich keine Eigenschaft, sondern wird nur intern benötigt. Dazu könntest Du einen passenden Konstruktor benutzen:
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14:
| public class Anmeldung : UserControl { private Form1 hostForm;
private Anmeldung() {}
public Anmeldung(Form1 owner) { hostForm = owner; } } |
Jürgen
Christian S. - Mo 22.12.08 20:11
Kommt der Designer mit einem privaten Konstruktor klar?
JüTho - Mo 22.12.08 20:31
Christian S. hat folgendes geschrieben : |
Kommt der Designer mit einem privaten Konstruktor klar? |
Gute Frage, höchstwahrscheinlich nicht.
@Rasmus
Korrigierte Version:
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14:
| public class Anmeldung : UserControl { private Form1 hostForm;
public Anmeldung() {}
public Anmeldung(Form1 owner) : base() { hostForm = owner; } } |
Jürgen
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!