Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
Zur Laufzeit erstellter Button nach Klick Text ändern
Krumnix
myCSharp.de - Member



Dabei seit:
Beiträge: 124
Herkunft: Schweiz

Themenstarter:

Zur Laufzeit erstellter Button nach Klick Text ändern

beantworten | zitieren | melden

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
private Nachricht | Beiträge des Benutzers
Stefan.Haegele
myCSharp.de - Member

Avatar #avatar-3068.jpg


Dabei seit:
Beiträge: 463
Herkunft: Untermeitingen

beantworten | zitieren | melden

[FAQ] Kommunikation von 2 Forms
private Nachricht | Beiträge des Benutzers
Krumnix
myCSharp.de - Member



Dabei seit:
Beiträge: 124
Herkunft: Schweiz

Themenstarter:

beantworten | zitieren | melden

Nein, das hat mit meiner Frage leider nix zu tun....
private Nachricht | Beiträge des Benutzers
Stefan.Haegele
myCSharp.de - Member

Avatar #avatar-3068.jpg


Dabei seit:
Beiträge: 463
Herkunft: Untermeitingen

beantworten | zitieren | melden

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.
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von Stefan.Haegele am .
private Nachricht | Beiträge des Benutzers
JimStark
myCSharp.de - Member

Avatar #dOpLzh7hN1az1g0eGRc0.jpg


Dabei seit:
Beiträge: 297

beantworten | zitieren | melden

Doch eigentlich schon, wird die Form geschlossen kannst du dich an Closed/FormClosed bzw. Closing/FormClosing hängen.
private Nachricht | Beiträge des Benutzers
Krumnix
myCSharp.de - Member



Dabei seit:
Beiträge: 124
Herkunft: Schweiz

Themenstarter:

beantworten | zitieren | melden

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?
private Nachricht | Beiträge des Benutzers
JimStark
myCSharp.de - Member

Avatar #dOpLzh7hN1az1g0eGRc0.jpg


Dabei seit:
Beiträge: 297

beantworten | zitieren | melden

Zitat von Krumnix

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
private Nachricht | Beiträge des Benutzers
Abt
myCSharp.de - Team

Avatar #avatar-4119.png


Dabei seit:
Beiträge: 16216

beantworten | zitieren | melden

Zitat von Krumnix
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.
Zitat
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.
- performance is a feature -

Microsoft MVP - @Website - @blog - @AzureStuttgart - github.com/BenjaminAbt
private Nachricht | Beiträge des Benutzers
Stefan.Haegele
myCSharp.de - Member

Avatar #avatar-3068.jpg


Dabei seit:
Beiträge: 463
Herkunft: Untermeitingen

beantworten | zitieren | melden

Zitat von Krumnix

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
private Nachricht | Beiträge des Benutzers
Th69
myCSharp.de - Experte

Avatar #avatar-2578.jpg


Dabei seit:
Beiträge: 4192

beantworten | zitieren | melden

@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?!
private Nachricht | Beiträge des Benutzers
BerndFfm
myCSharp.de - Team

Avatar #nZo9Gyth4VPDSxGqM4sT.jpg


Dabei seit:
Beiträge: 3793
Herkunft: Frankfurt a.M.

beantworten | zitieren | melden

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
private Nachricht | Beiträge des Benutzers
Krumnix
myCSharp.de - Member



Dabei seit:
Beiträge: 124
Herkunft: Schweiz

Themenstarter:

beantworten | zitieren | melden

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
private Nachricht | Beiträge des Benutzers