Von einer Klasse auf die Form zugreifen

Eroli

Erfahrenes Mitglied
Hallo,

ich hoffe mal, dass mir hier schneller geholfen werden kann, als in meinem "Stammforum":)

Die benutzte Programmiersprache ist C# mit .NET 2.0

Also ich habe eine Klasse erstellt und diese Klasse wird so aufgerufen
Code:
Klassenname Test1 = new Klassenname("Test", 50, 50, 25, new Point(20, 20), new Size(60, 20), "");

Der Konstruktor der Klasse sieht so aus:

Code:
public Klassenname(string Name, int Health, int Armor, int Speed, Point Position, Size Size, string Image)
        {
            m_Health = Health;
            m_Armor = Armor;
            m_Speed = Speed;
            
            Button btn = new Button();
            btn.Name = String.Format("DynButton{0}", m_Count);
            btn.Text = Name;
            btn.Size = Size;
            btn.Location = Position;
            MapBox.Controls.Add(btn);
        }

Die Klasse an sich erbt alles von der Form, von der Sie aufgerufen wird:
Code:
class Klassenname : Formname

Nun sollte der Button, der im Konstruktor erstellt wird, der PictureBox zugewiesen werden, aber es passiert nix. wieso?
Falls ihr weitere Angaben braucht, nur zu.

MfG,
Eroli
 
Zuletzt bearbeitet:
Hi!

Willkommen im Forum!

Controls können immer nur ein Parent haben. Von daher würde der Button auch von deinem MapBox-Objekt verschwinden und nur auf dem ServerOptionsPanel-Objekt angezeigt werden. Wenn Du ihn auf beiden haben willst, musst leider 2 Buttons erstellen. Kannst aber deren Control.Click-Ereigniss mit ein und der selben Methode verknüpfen... ;)

Btw: In dem [thread=248735]C# Beim drücken eines Buttons Fensterinhalt ändern - Thread[/thread] könntest Dir evtl noch ein paar Anregungen holen. :)
 
Ok, das bringt aber leider nix, denn auch wenn ich die zweite Zeile auskommentiere, so ist der Button nicht auf dem MapBox-Objekt vorhanden.
Sonst noch ideen?

Den Link gucke ich mir jetzt an.
EDIT: Link angeguckt - hat mich aber weder angeregt noch hat er mir geholfen :D Sorry aber is so....


Also, sonst noch Ideen wieso der Button nicht erscheint?
 
Zuletzt bearbeitet:
Was ist dein MapBox-Objekt im Detail? Also was für ein Typ von Control?

Der Link beschreibt lediglich, wie man auf einfache Weise auf UserControls oder Forms zugreifen kann, sofern diese im Programm nur einmal vorhanden sind...

Ach hier, ganz vergessen: Runtime Object Editor - The Code Project
Damit kannst dir deine Controls zu Laufzeit anschauen. :)
 
Zuletzt bearbeitet:
Soweit ich weiß, unterstützt die PictureBox keine extra Controls. Da müsstest schon ein Panel hernehmen...

Ich arbeite leider noch nicht mit .NET 2.0. von daher kenne ich alle neue Steuerelemente noch nicht so gut. :( Schau sie Dir alle genau an und ließ dich in die Topics auf der MSDN ein. Somit bekommst erst mal einen Überblick. Es gibt zudem wirklich viele CodeClips und Casts zu den neuen Controls. ;) Vielleicht findest ein Neueres bzw. Passenderes.
 
Also ich glaube schon, dass die unterstützt werden, denn wenn ich den Code, der jetzt im Konstruktor der Klasse steht in die Ereignissmethode des Buttons schreibe, dann erscheint der Button.

Nur so, mit dem Umweg über den Konstruktor, eben nicht.
 
Sorry, aber das hab ich jetzt nicht verstanden. :D Könntest Du das mal bitte besser formulieren? Welche Ereignisbehandlung von welchem Button?

Wie währe es wenn Du mal ein simples Beispielprojekt machst. Und mir zeigst, was wie nicht geht. Ich schaue es mir heut Abend @home mal an. Da hab ich ein VS2005 Pro. :)
 
Beispielprojekt halte ich für etwas übertrieben, kann ich dir aber gleich gerne machen.

Also, so wie es dort http://www.tutorials.de/forum/1394981-post1.html beschrieben steht klappt es nicht.

Schreibe ich den Code aus dem Konstruktor der Klasse, nun aber DIREKT in das OnClick Ereigniss irgendeines Buttons schreibe, dann erzeugt dieser BUtton mir die gewünschten Buttons:
Code:
        private void button1_Click(object sender, EventArgs e)
        {
            //Creep Creep1 = new Creep("Test", 50, 50, 25, new Point(20, 20), new Size(60, 20), "");
            Button btn = new Button();
            btn.Name = String.Format("DynButton{0}", 2);
            btn.Text = btn.Name;
            btn.Size = new Size(60,20);
            btn.Location = new Point(20,20);
            MapBox.Controls.Add(btn);
        }
Der obige Code-Ausschnitt klappt also. Aber warum? Oder warum klappt der verlinkte Codeausschnitt nicht?
 
Ähm, ich hatte doch gesagt, dass bei
C#:
MapBox.Controls.Add(btn);
ServerOptionsPanel.Controls.Add(btn);
der Button von deiner PictureBox (MapBox) verschwindet und dann auf dem ServerOptionsPanel-Objekt angezeigt wird. Das wird es wohl sein, weil Controls nur ein Parent haben können. Ansonsten muss ich leider passen.
 
Zurück