Autor Beitrag
Suras78
Hält's aus hier
Beiträge: 14



BeitragVerfasst: Fr 27.05.11 11:00 
Hallo,

ich habe eine eigene Button Klasse, die sich selbst positionieren kann. Jetzt soll sie sich, sobald sie erstellt wird, auch selbst einfügen, im Konstruktor steht also:
ausblenden C#-Quelltext
1:
WindowsFormsApplication2.Form1.panel2.Controls.Add(this);					

Panel 2 steht auf public. Leider kriege ich trotzdem nur die Meldung "Für das nicht statische Feld, die Methode oder die Eigenschaft "WindowsFormsApplication2.Form1.panel2" ist ein Objektverweis erforderlich."

Was mache ich falsch?
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19340
Erhaltene Danke: 1752

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Fr 27.05.11 11:12 
Hallo und :welcome:

Form1 ist der Name deiner Klasse, keine Instanz der Klasse, also kein existierendes Objekt.
Du benötigst für den Zugriff aber ein konkret existierendes Objekt.

Davon abgesehen ist es aber ohnehin äußerst schlechter objektorientierter Stil aus einer Klasse heraus direkt zu versuchen auf das Formular zuzugreifen.

Beim Erstellen deiner Klasse musst du also übergeben wohin diese hinzugefügt werden soll.

Für diesen Beitrag haben gedankt: Suras78
Suras78 Threadstarter
Hält's aus hier
Beiträge: 14



BeitragVerfasst: Fr 27.05.11 11:16 
Ok, danke, dann werde ich das lassen ;) Aber eine Rückfrage hätte ich noch:
Wieso funktioniert
ausblenden C#-Quelltext
1:
2:
this.Location = new Point(WindowsFormsApplication2.Form1.currentButtonLoc, 10);
WindowsFormsApplication2.Form1.currentButtonLoc += this.Size.Width + 20;

dann? (befindet sich in der gleichen Klasse)
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19340
Erhaltene Danke: 1752

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Fr 27.05.11 11:29 
Vielleicht ist currentButtonLoc als static deklariert? ;-)

Für diesen Beitrag haben gedankt: Suras78
Suras78 Threadstarter
Hält's aus hier
Beiträge: 14



BeitragVerfasst: Fr 27.05.11 11:30 
Ist es :x Naja danke =)
Edit:
Habe noch eine Frage: Gibt es eine Möglichkeit, das onClick des Buttons etwas tun zu lassen, ohne dafür eine extra methode zu schreiben? Die neue MEthode würde nämlich dann das in der vorherigen erzeugte Label nicht mehr kennen und ich bin zu doof, das dem new Eventhandler zu übergeben :x . Also so sieht es jetzt aus:
ausblenden C#-Quelltext
1:
2:
3:
4:
            MyLabel label = new MyLabel();
            this.panel1.Controls.Add(label);
            label.BringToFront();
            MyButton LB1 = new MyButton("Farbe ändern");

und dazukommen soll jetzt sowas:
ausblenden C#-Quelltext
1:
LB1.Click += label.changeColor();					
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19340
Erhaltene Danke: 1752

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Fr 27.05.11 11:46 
Ich glaube du suchst anonyme Methoden: ;-)
msdn.microsoft.com/d...ibrary/0yw3tz5k.aspx

Für diesen Beitrag haben gedankt: Suras78
Suras78 Threadstarter
Hält's aus hier
Beiträge: 14



BeitragVerfasst: Fr 27.05.11 11:57 
Vielen dank =)