mikrocontroller.net

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


Autor: Matthias S. (da_user)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Arc Net (arc)
Datum:

Bewertung
0 lesenswert
nicht 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();
}

Autor: Matthias S. (da_user)
Datum:

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

Autor: Matthias S. (da_user)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Matthias S. (da_user)
Datum:

Bewertung
0 lesenswert
nicht 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.
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.

Autor: Arc Net (arc)
Datum:

Bewertung
0 lesenswert
nicht 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
aTableLayoutPanel.Controls.Add(newGroupBox, col, row);

> z.B.
>
> newGroupBox.top = oldGroupBox.top + oldGroupBox.Height + 10
> 
>
> 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...

Autor: Matthias S. (da_user)
Datum:

Bewertung
0 lesenswert
nicht 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"

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.