Autor Beitrag
covel
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 131

Win XP PRo
Borland D7/C#
BeitragVerfasst: Mo 10.11.08 17:02 
Hallo,

ich bin ein Neuling in C#!! Habe folgende Frage:

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
            Button button;
            button = new Button();
            button.Name ="Test";
            button.Text = "test";
            button.Left=50;
            button.Top=50;
            button.Width = 100;
            button.Height = 20;
            button.Visible = true;
            
            panel1.Controls.Add(button); //Form1 zuweisen


Wie kann ich den Button der Form1 zuweisen? Bzw. warum wird der Button ohne "panel1.Controls.Add(button);" nicht auf der Form1 angezeigt?
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19341
Erhaltene Danke: 1752

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Mo 10.11.08 17:06 
Ohne jetzt zu wissen ob das in C# wie in Delphi ist:
In Delphi musst du den Parent auf das entsprechende Control setzen, in diesem Fall auf das Panel, du kannst es ja einfach ausprobieren.
ausblenden C#-Quelltext
1:
button.Parent = panel1;					

// EDIT:
Scheint ja doch zu stimmen^^


Zuletzt bearbeitet von jaenicke am Di 11.11.08 11:36, insgesamt 2-mal bearbeitet
csharper
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 42



BeitragVerfasst: Mo 10.11.08 17:09 
Mal eine Frage. Wie erstellst du deine Form? Wenn du die Entwurfsansicht hast kann man doch einfach den Button auf die Form ziehen und fertig.

Beschreib mal nochmal genauer dein Problem.

Grüße
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 10.11.08 17:11 
Falsch, C# arbeitet nicht wie Delphi!

In C# werden Controls dadurch zum Anzeigen gebracht, dass sie in die Controls-Auflistung des übergeordneten Controls eingetragen werden. MyForm.Controls enthält die Controls der obersten Ebene (Panels, ToolStrips u.ä.), MyPanel.Controls enthält die Controls dieses Panels usw. Wenn alle Controls eines Formulars durchlaufen bzw. durchsucht werden müssen, muss dies rekursiv über die Controls-Eigenschaft laufen.

user profile iconcovel hat folgendes geschrieben Zum zitierten Posting springen:
Bzw. warum wird der Button ohne "panel1.Controls.Add(button);" nicht auf der Form1 angezeigt?

In diesem Fall ist der Button Bestandteil von panel1, und panel1 ist Bestandteil des Formulars.

Wenn Du die Designer.cs genauer durchsuchst, wirst Du auf mehrere solcher Festlegungen stoßen und damit Dein Verständnis vergrößern.

Gruß Jürgen
covel Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 131

Win XP PRo
Borland D7/C#
BeitragVerfasst: Mo 10.11.08 21:50 
Ich wollte einfach nur einen "Button" per Button_Click erzeugen.
Nachdem ich mir die Designer.cs angeguckt habe wurde mir einiges klar. Danke für die Hilfe

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
private void button1_Click(object sender, EventArgs e)
        {
           
            this.SuspendLayout();
            Button button = new Button();
            button.Location = new Point(1010);
            button.Size = new Size(7525);
            button.Text = "OK";

            this.Controls.AddRange(new Control[] { button});
            this.ResumeLayout();

        }
Kha
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3803
Erhaltene Danke: 176

Arch Linux
Python, C, C++ (vim)
BeitragVerfasst: Mo 10.11.08 21:56 
Nur weil der Desginer AddRange benutzt, heißt das nicht, dass dein Add vom Anfang falsch war ;) . Und Suspend/ResumeLayout brauchst du auch erst bei vielen Controls auf einmal.

_________________
>λ=
covel Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 131

Win XP PRo
Borland D7/C#
BeitragVerfasst: Mo 10.11.08 23:58 
Ich bin heute erst wirklich angefangen mich mit C# zu beschäftigen. Von daher muss ich noch einiges nachlesen und werde sicherlich noch einige "dumme" Fragen stellen.
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4807
Erhaltene Danke: 1061

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: Di 11.11.08 11:01 
Nur noch mal als Klarstellung:
Die Lösung von jaenicke (wie in Delphi) funktioniert auch in C# (.NET).

Die meistverwendete Methode (u.a. auch vom VS-Designer) ist jedoch, wie JüTho schon beschrieben hat, mittels Controls.Add(...) bzw. Controls.AddRange(...).

Hier noch das Zitat aus der MSDN zu Control.Parent:
Zitat:

Control.Parent-Eigenschaft:
Ruft den übergeordneten Container des Steuerelements ab oder legt diesen fest.