Entwickler-Ecke
WinForms - Instanz soll sich selbst einfügen
Suras78 - Fr 27.05.11 11:00
Titel: Instanz soll sich selbst einfügen
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:
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 - 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.
Suras78 - Fr 27.05.11 11:16
Ok, danke, dann werde ich das lassen ;) Aber eine Rückfrage hätte ich noch:
Wieso funktioniert
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 - Fr 27.05.11 11:29
Vielleicht ist currentButtonLoc als static deklariert? ;-)
Suras78 - 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:
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:
C#-Quelltext
1:
| LB1.Click += label.changeColor(); |
Suras78 - Fr 27.05.11 11:57
Vielen dank =)
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 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!