Laden...

Zur Laufzeit erstellter Button nach Klick Text ändern

Erstellt von Krumnix vor 2 Jahren Letzter Beitrag vor 2 Jahren 501 Views
K
Krumnix Themenstarter:in
129 Beiträge seit 2018
vor 2 Jahren
Zur Laufzeit erstellter Button nach Klick Text ändern

Hallo zusammen,

ich erstelle zur Laufzeit anhand von Einträgen in einer Konfiguration Buttons auf einem WinForm in einem Panel.
Das funktioniert alles sehr gut.

Beim Click-Event jeden Buttons starte ich eine 2. Winform, wo Einstellungen für den jeweiligen Eintrag erfolgen können.
Beim Schließen des 2. Forms soll der Text des Buttons, welches vorher angeklickt wurde, sich ändern.

Habt ihr eine Tipp für mich, wie ich das am besten anstellen kann?

Danke

463 Beiträge seit 2009
vor 2 Jahren
K
Krumnix Themenstarter:in
129 Beiträge seit 2018
vor 2 Jahren

Nein, das hat mit meiner Frage leider nix zu tun....

463 Beiträge seit 2009
vor 2 Jahren

Ich bezweifle mal, dass man den Artikel in knapp 5 Minuten lesen und verstehen kann.
Du musst, wenn du die 2. Form **asynchron **aufrufst nun mal die 1. Form darüber informieren wenn diese geschlossen werden soll und du in der 1.Form abhängig davon Controls anpassen/verändern willst -> Kommunikation von 2 Forms.

309 Beiträge seit 2020
vor 2 Jahren

Doch eigentlich schon, wird die Form geschlossen kannst du dich an Closed/FormClosed bzw. Closing/FormClosing hängen.

K
Krumnix Themenstarter:in
129 Beiträge seit 2018
vor 2 Jahren

Nein. Meine Frage hat nix mit Kommunikation zwischen Forms zu tun...

Der Button wird per Laufzeit generiert. Es sind 20 und mehr Buttons auf dem 1. Form.
Ich will den Button, der geklickt wurde seinen Text ändern. Da diese erst erstellt wird, kenne ich ihn beim Programmierung noch nicht.
Wie kann ich also den Text von diesem Button ändern, sprich wissen, welcher Button von den ganzen generierten nun der ist, welcher geklickt wurde?

309 Beiträge seit 2020
vor 2 Jahren

Wie kann ich also den Text von diesem Button ändern, sprich wissen, welcher Button von den ganzen generierten nun der ist, welcher geklickt wurde?

https://docs.microsoft.com/de-de/dotnet/desktop/winforms/event-handlers-overview-windows-forms

16.806 Beiträge seit 2008
vor 2 Jahren

Nein. Meine Frage hat nix mit Kommunikation zwischen Forms zu tun...

Ich werd jetzt zwar die dritte Person sein; aber doch: wenn man Deinen Startbeitrag durchliest, dann hat das sehr wohl mit der Kommunikation von 2 Forms zutun.

Beim Schließen des 2. Forms soll der Text des Buttons, welches vorher angeklickt wurde, sich ändern.

Habt ihr eine Tipp für mich, wie ich das am besten anstellen kann?

Musst was auf der 2. Form callen; und die Identifizierung vom Button is ja einfach nur ne gespeicherte Referenz.

463 Beiträge seit 2009
vor 2 Jahren

Wie kann ich also den Text von diesem Button ändern, sprich wissen, welcher Button von den ganzen generierten nun der ist, welcher geklickt wurde?

Indm du z.B. in dem Feld "Tag" (beim Anlegen des Buttons befüllen) eine eindeutige ID mitgibst und diese in OnClick-Handler des Buttons abfrägst

4.931 Beiträge seit 2008
vor 2 Jahren

@Stefan: Das ist nicht nötig, da sender das Button-Objekt beim Aufruf der Click-Methode beinhaltet (den passenden Link dazu hat JimStark ja schon gepostet).

@Krumnix: Du mußt nur dieses Objekt passend zu Button (zurück)casten, s. [FAQ] Casten aber richtig: Boxing/Unboxing - () / is / as / Pattern Matching bzw. mein Beitrag in Anzahl Checkbox checked als Wert für for Schleife (letzter Abschnitt, nur daß du Button statt TextBox benutzt).
Außerdem nehme ich mal an, daß du den Einstellungsdialog modal aufrufst, d.h. wie in meinem Code, kannst du direkt nach dem Schließen (mit "OK") die Textänderung durchführen.

Eigentlich ist das aber eine absolute Grundlage zur WinForms-Programmierung, das mußt du doch schon vorher öfters benutzt haben?!

3.825 Beiträge seit 2006
vor 2 Jahren

Mit modalem Dialog geht das ganz kurz :


Button button1 = new Button();
button1.Text = "&Abbrechen";
....Add(button1);

dlgAbfrage dlg = new dlgAbfrage();
dlg.ShowDialog();

button1.Text = "&Schließen";

Wenn der Text vom Dialog abhängig ist :


DialogResult result = dlg.ShowDialog();
//oder
string auswahl = dlg.Auswahl;
if (...)

Das wird in dem Artikel "Kommunikation von 2 Forms" erklärt.

Wenn mehrere Buttons den gleichen Click Events aufrufen:


((Button)sender).Text = "&Schließen";

Grüße Bernd

Workshop : Datenbanken mit ADO.NET
Xamarin Mobile App : Finderwille Einsatz App
Unternehmenssoftware : Quasar-3

K
Krumnix Themenstarter:in
129 Beiträge seit 2018
vor 2 Jahren

Mir ging es nur um das Rausfinden des Buttons, der die Aktion ausgelöst hat und diesen zu ändern.
Dies wurde beantwortet und funktioniert, danke.

Der Rest den beiden Forms war als Anschauungsbeispiel und alles was dazu gehört läuft ja einwandfrei, wie geschrieben 🙂