Hallo,
ich bekomme aus einer Datenbank eine Tabelle mit Eigenschaften. nun möchte ich anhand dieser Tabelle Buttons anlegen (dynamisch).
Wie kann ich das machen? Wenn ich mir einen Button erzeuge wird der nicht angezeigt, weder mit show, noch mit dispose?
Kann mir da jemend einen Tipp geben?
Vielen Dank, Oli
Viele Grüße, Oli
Hallo oli001,
Controls.Add (myButton)
herbivore
die Forumlarklasse hat eine Eigenschaft. Nennt sich "Controls" ist vom Typ ControlCollection. Da musst du die buttons via .Add(...) hinzufügen.
Beispiel:
Form1_Load(object seinder, EventArgs e)
{
Button btn = new Button();
btn.Text = "Hallo";
this.Controls.Add(btn);
}
Hi,
Button x = new Button();
x.Name = areas[1].ToString();
x.Show();
Controls.Add(x);
Klappt auch nicht.... 🙁
Viele Grüße, Oli
Hallo oli001,
du musst noch die Position festlegen und auch dafür sorgen, dass es nicht vielleicht hinter einem anderen Control verdeckt ist.
herbivore
PS: Siehe auch: Control wird nicht angezeigt
Hallo oli001,
noch mit dispose?
🤔
Button myBtn = new Button();
Button myButton = new Button();
myButton.Name = "myDynamicButton";
myButton.Size = new Size(192, 32);
myButton.Location = new Point(0, 0);
myButton.Text = "Dynamischer Button";
this.Controls.Add(myButton);
Funktioniert auf jeden Fall. Ansonsten kannst du dir gerne mal die .Designer.cs anschauen um zu sehen, was alles festgelegt wird, wenn du ein neues Control im Designer deiner Form hinzufügst.
Es ist toll jemand zu sein, der nichts von der persönlichen Meinung Anderer hält. - frisch-live.de
Danke,
haut hin. Jetzt ist das Problem dass ich ja mehrere Buttons brauche. Ich weiß aber vorher nicht wie viele. Gibt es irgendwie ein Collection, in die man Buttons dynamisch reinwerfen kann??
Danke Oli
Viele Grüße, Oli
Hallo oli001,
List<Button>
herbivore
Hallo,
habe noch eine Frage zu dem Thema. Die Buttons sind nun angeordnet, aber wie kann ich nu den einzelnen Buttons eine Funktion zuweisen. Also wie wissen die Buttons was sie tun sollen, wenn sie gedrückt werden??
Danke Oli
Viele Grüße, Oli
Hallo oli001,
solch Dinge sind eigentlich Basiswissen welches du dir selbst aneignen solltest.
Ich sage nur Button.Click den Rest musst du selbst rausfinden.
Es ist toll jemand zu sein, der nichts von der persönlichen Meinung Anderer hält. - frisch-live.de
Hallo oli001,
ich stimme frisch zu. Trotzdem noch ein kleiner Hinweis. Du kannst bei allen Buttons den gleichen EventHandler registrieren. Wenn der EventHandler aufgerufen wird, wird im ersten Parameter der Button übergeben, der geklickt wurde.
Alles weitere in: Galileo <openbook>: Visual C# 2005 von Andreas Kühnel
herbivore
Hallo herbivore,
nachdem ich den Sonntag vergebens mit internetrecherche verbracht habe, stoße ich nun auf diesen Thread, der (16 Jahre später) mein Problem trifft. Offensichtlich hatte aber Oli001 nicht 'meine' Probleme.
In einem Windows Forms Projekt habe ich ein Control erstellt (myButton) welches einen standard Button enthält und daneben etwas zusätzliche Design-Dinge. Diesen MyButton möchte ich nun testweise in einem kleinen Prüfprogramm per Button.Click in eine SlideBar einfügen. Das klappt alles problemlos. Nach jedem Butto.Click erscheint wunschgemäß der neue, zusätzliche Button.
Mein Problem besteht darin, dass ich es nicht schaffe die Events von MyButton zu nutzen. Alle Varianten mit den Button events umzugehen die ich hier fand bleiben ohne funktion bei mir - sprich, auf ein MyButton.Click erfolgt nicht die gewünschte Reaktion. Letzte Version meiner Tests ist folgende, in der ich eine Ausgabe 'BuildSlideBar' im Debugfenster erhalte, aber wenn ich dann den eigenen 'SlideBarButton' drücke, kommt keine Ausgabe im Debugfenster von VS.
private void BuildSlideBar(List <SlideBarButton> buttonList)
{
Debug.WriteLine("BuildSlideBar");
foreach (SlideBarButton sbb in buttonList)
{
slideBar.Controls.Add(sbb);
// sbb.Click += (object s, EventArgs e) => { Debug.WriteLine("Test "); };
sbb.Click += (s, e) => { MessageBox.Show( sbb.Name + sbb.ButtonText); };
}
slideBar.Refresh();
}
Ich habe einige Berichte gefunden, dass beim dynamische Anlegen von Controls, also zur Laufzeit, schwierigkeiten mit den Events macht. Wennich die Buttons nicht dynamisch zur Laufzeit, sondern vorab im Designer anlege, geht ja alles wunderbar.
Hast Du einen Tip(p) für mich, wie ich das Problem lösen kann?
Grüße
Christian
Es hat sich gelöst.
Möglicherweise verwirrt durch die vielen Internetbeiträge habe ich wohl schlicht den falschen Weg versucht gangbar zu machen.
Durch das Erstellen eines eigenen Click Events in meiner 'Control', welches durch das Click-Event der im Control befindlichen Button ausgelöst wird ist nun auch im Testprogramm mein eigenes Click-Event verfügbar und wird, wie gewünscht, ausgelöst.
Thema geschlossen.
Hallo,
evtl. noch als Ergänzung:
herbivore hatte ja bereits erwähnt, dass ein allgemeiner EventHandler erstmal ausreicht, da der erste Parameter (sender) ja die Button-Instanz zurück gibt.
Um nun zu wissen, um welchen Button es sich handelt, kann man entweder den Namen prüfen oder man verwendet die Tag-Eigenschaft des Buttons bei Erstellung, um dort weitere Informationen abzulegen, welche dann im EventHandler entsprechend verwendet werden können.
private void GlobalEventHandlerForButtonClick(object sender, EventArgs e)
{
if (sender is Button button)
{
if (button.Name == "dynamicButton1")
{
// Code to handle click event for dynamicButton1
} else
if (button.Tag != null)
{
// Check data in button.Tag
}
}
}
Nobody is perfect. I'm sad, i'm not nobody 🙁