Autor Beitrag
Rassi
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 79



BeitragVerfasst: Mo 22.12.08 16:57 
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.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: 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

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
JüTho
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2021
Erhaltene Danke: 6

Win XP Prof
C# 2.0 (#D für NET 2.0, dazu Firebird); früher Delphi 5 und Delphi 2005 Pro
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 79



BeitragVerfasst: 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.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: Mo 22.12.08 17:56 
@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.
user profile iconRassi hat folgendes geschrieben Zum zitierten Posting springen:
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 Suche bei Google OPENBOOK C# oder Suche bei Google OPENBOOK VISUAL C# nachschlagen). Oder ist das Steuerelement nicht von Dir geschrieben, dann ist die Aufgabe natürlich schwieriger ;-)

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
Rassi Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 79



BeitragVerfasst: 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.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: Mo 22.12.08 18:55 
user profile iconRassi hat folgendes geschrieben Zum zitierten Posting springen:
HostForm : Form1

Sorry, das war Delphi Prism Syntax, in C# ist es natürlich Form1 HostForm.

user profile iconRassi hat folgendes geschrieben Zum zitierten Posting springen:
Ich haben jetzt ein paar Sachen probiert, aber ich bekomme es nicht hin.

Zeig doch mal, wo Du nicht weiter kommst.

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
Rassi Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 79



BeitragVerfasst: Mo 22.12.08 19:39 
Hallo, und Danke.

Habe einwenig rumgehampelt, bis ich die entsprechenden Deklarationen hatte.

Also wie folgt:
ausblenden 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:

ausblenden 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 user profile iconChristian S.: C#-Tags hinzugefügt
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: 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.

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
JüTho
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2021
Erhaltene Danke: 6

Win XP Prof
C# 2.0 (#D für NET 2.0, dazu Firebird); früher Delphi 5 und Delphi 2005 Pro
BeitragVerfasst: 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:
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
public class Anmeldung : UserControl
{
   private Form1 hostForm; 

   //  Standardkonstruktor ungültig machen; 
   //  kann auch entfallen, weil es sowieso nicht benutzt werden kann
   private Anmeldung() {}   

   //  spezieller Konstruktor
   public Anmeldung(Form1 owner)
   {
      hostForm = owner;
   }
}

Jürgen


Zuletzt bearbeitet von JüTho am Mo 22.12.08 20:32, insgesamt 1-mal bearbeitet
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: Mo 22.12.08 20:11 
Kommt der Designer mit einem privaten Konstruktor klar?

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
JüTho
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2021
Erhaltene Danke: 6

Win XP Prof
C# 2.0 (#D für NET 2.0, dazu Firebird); früher Delphi 5 und Delphi 2005 Pro
BeitragVerfasst: Mo 22.12.08 20:31 
user profile iconChristian S. hat folgendes geschrieben Zum zitierten Posting springen:
Kommt der Designer mit einem privaten Konstruktor klar?

Gute Frage, höchstwahrscheinlich nicht.

@Rasmus
Korrigierte Version:
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
public class Anmeldung : UserControl
{
   private Form1 hostForm; 

   //  Standardkonstruktor
   public Anmeldung() {}   

   //  spezieller Konstruktor, der den Standardkonstruktor
   //  (soweit nötig) benutzt
   public Anmeldung(Form1 owner) : base()
   {
      hostForm = owner;
   }
}

Jürgen