Forum: PC-Programmierung c# - Steuerelemente durch Code erzeugen/zeichnen


von Matthias S. (da_user)


Lesenswert?

Tag,

So, zweiter Versuch, nach dem ich das falsche Forum erwischt habe: 
http://www.mikrocontroller.net/topic/109818

Ich habe in Visual 2008 Express mit dem grafischen Editor eine Form
erzeugt, in der ein TabControl angezeigt wird. Innerhalb dieses
TabControlls sollen nun durch Code weitere Steuerelemente (Textboxen,
Buttons,..) angezeigt werden. Meine Probleme nun:

- Wie erzeuge ich innerhalb der entsprechenden TabControl Registerkarte
ein neues Steuerelement?

- Je nach Ereignis (z.B. Benutzereingabe,...) sollen neue Steuerelemente
hinzugefügt oder andere gelöscht werden. Wie zeichne ich die dann neu?

MfG
Matthias

von Arc N. (arc)


Lesenswert?

Genauso wie das der Forms-Designer macht...
[c]
void ButtonAddClick(object sender, EventArgs e) {
    Button newButton = new Button();
    newButton.Left = newX;
    newButton.Top = newY;
    SuspendLayout();

    aTabPage.Controls.Add(newButton);
    ResumeLayout(false);
    PerformLayout();
}

von Matthias S. (da_user)


Lesenswert?

Ähm, ja... und wie bringe ich den Button dazu dass er angezeigt wird? 
o.O

von Matthias S. (da_user)


Lesenswert?

Ja ne, ist klar.. bin auf'm Schlauch gestanden.. indem ich die Methode 
ButtonAddClick einfach aufrufe.

Nun stehe ich aber vor einem weiteren Problem. Ich möchte die Buttons 
jetzt innerhalb mehreren GroupBoxen anordnen. Also so in die Richtung 
Button und GroupBox Array. Wie bekomme ich aber jetzt raus, innerhalb 
welcher GroupBox welcher Button gedrückt wurde?

von Matthias S. (da_user)


Lesenswert?

Ach mist, während dem Bearbeiten ist die Bearbeitungs-Zeit abgelaufen... 
alles nochmal neu grml

Also, ich hätte noch zwei Fragen:

Kann ich bei GroupBox.AutoSize = True die Größe, bzw anderen Positionen 
auslesen, um weitere GroupBoxen passend zu Positionieren?
z.B.
1
newGroupBox.top = oldGroupBox.top + oldGroupBox.Height + 10

Dann:
Müsste SuspendLayout nicht auch das setzen der Positionen mit umfassen? 
Was bewirkt den PerformLayout() genau? Da ist die Hilfe irgendwie nicht 
sehr aufschlussreich.

von Arc N. (arc)


Lesenswert?

Matthias S. wrote:
> Ach mist, während dem Bearbeiten ist die Bearbeitungs-Zeit abgelaufen...
> alles nochmal neu *grml*
>
> Also, ich hätte noch zwei Fragen:
>
> Kann ich bei GroupBox.AutoSize = True die Größe, bzw anderen Positionen
> auslesen, um weitere GroupBoxen passend zu Positionieren?

Sollte gehen, bei komplizierteren Sachen geht's mit einem 
TableLayoutPanel
einfacher, wenn man die Zeilen und Spalten passend einstellt/hinzufügt
1
aTableLayoutPanel.Controls.Add(newGroupBox, col, row);

> z.B.
>
1
> newGroupBox.top = oldGroupBox.top + oldGroupBox.Height + 10
2
>
>
> Dann:
> Müsste SuspendLayout nicht auch das setzen der Positionen mit umfassen?

In dem Beispiel von oben nicht, da das Control noch nicht dargestellt 
wird bzw. irgendwo hinzugefügt wurde. Wenn das Control allerdings schon 
irgendwo dargestellt wird, sollte man SuspendLayout vor umfangreichen 
Änderungen aufrufen, ansonsten wird für jede Änderung von Location, 
Size, Dock etc. das Layout erneut berechnet.

> Was bewirkt den PerformLayout() genau? Da ist die Hilfe irgendwie nicht
> sehr aufschlussreich.

Letztlich führt das ganze für das angegebene Control und alle 
untergeordneten Controls das Layout durch bzw. ruft die Layout-Handler 
der Controls auf. Die Reihenfolge der Suspend/Resume/PerformLayouts hat 
u.U. auch Einfluss auf die Performanz des ganzen...

von Matthias S. (da_user)


Lesenswert?

Na, da hab ich ja jetzt schon ne ne Menge zum spielen! Dankeschön!

 Stellt sich nur noch die Frage mit den Zugrifff, bevor das Edit 
untergegangen ist: Beitrag "Re: c# - Steuerelemente durch Code erzeugen/zeichnen"

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.