Laden...

Wie kann ich eine Variable von Form2 nach Form1 schicken?

Erstellt von newsletter vor 6 Jahren Letzter Beitrag vor 6 Jahren 2.318 Views
N
newsletter Themenstarter:in
7 Beiträge seit 2018
vor 6 Jahren
Wie kann ich eine Variable von Form2 nach Form1 schicken?

Moin,

Die Werte schicke ich bereits so von Form1 zu Form2:

FORM1:


FrmAlternative Form2uebergang = new FrmAlternative();
            Form2uebergang.Anform2Str1 = StrasseHNrsplit[0]; //Übergang -> Form2 Strasse1

FORM2:


public partial class FrmAlternative : Form
    {
        public string Anform2Str1
        {
            get { return TxtStrasse1.Text; }
            set { TxtStrasse1.Text = value; }
        }


}

Nun will ich umgekehrt wieder welche zurückschicken:
Form2->Form1:

FORM2:


private void CmdUebertragen_Click(object sender, EventArgs e)
        {
            //Übertragung an Form1

            FrmDokPrint Form1uebergang = new FrmDokPrint();
            Form1uebergang.Anform1Str1 = TxtStrasse1.Text;
        }

FORM1:


//Retour
        public string Anform1Str1
        {
            get { return TxtStrasse.Text; }
            set { TxtStrasse.Text = value; }
        }

Wieso geht das nicht ? TxtStrasse.Text bleibt unverändert?

709 Beiträge seit 2008
vor 6 Jahren

Moin newsletter,
schau mal hier: [FAQ] Kommunikation von 2 Forms

M
33 Beiträge seit 2012
vor 6 Jahren

Schau dir den von Pinki verlinken Artikel an.

private void CmdUebertragen_Click(object sender, EventArgs e)
        {
            //Übertragung an Form1

            FrmDokPrint Form1uebergang = new FrmDokPrint();
            Form1uebergang.Anform1Str1 = TxtStrasse1.Text;
        }

Du erstellst eine neue Instanz von FrmDokPrint, diese siehst du aber nicht da Form1uebergang unsichtbar ist. Änder das mal in :

private void CmdUebertragen_Click(object sender, EventArgs e)
        {
            //Übertragung an Form1

            FrmDokPrint Form1uebergang = new FrmDokPrint();
            Form1uebergang.Show();
            Form1uebergang.Anform1Str1 = TxtStrasse1.Text;
        }

dann siehst du was wirklich passiert ...

mfg
Wasabi

Falls fallend du vom Dach verschwandest, brems bevor du Unten landest.

N
newsletter Themenstarter:in
7 Beiträge seit 2018
vor 6 Jahren

Ah Danke!
Er eröffnet die ganze Form1 nochmal 8o
aber eigentlich sollte er ja nur den text von form2 in form1, welche bereits im hintergrund geöffnet ist neu reinnehmen 🤔

16.807 Beiträge seit 2008
vor 6 Jahren

Ich bezweifle massiv, dass Du in 8 Minuten den Artikel vollständig gelesen, verstanden und nachvollzogen hast.
Der Linkt wurde Dir gegeben, dass Du das dortige Wissen übernehmen und anwenden kannst.

aber eigentlich sollte er ja nur den text von form2 in form1, welche bereits im hintergrund geöffnet ist neu reinnehmen

würde sich als Frage erübrigen, wenn Du dies getan hättest.

57 Beiträge seit 2012
vor 6 Jahren

ich gehe davon aus, dass du mit WPF-Elementen arbeitest.
Dann mach doch direkt einen Binding-Befehl mit 2Way-Modus! Einfacher gehts doch nicht

OO gibts seit Platon - hatte der auch C#?

16.807 Beiträge seit 2008
vor 6 Jahren

Da er von Form ableitet, wirds Windows Forms sein.
In WPF leitet man von Window ab. Aber ja, auch in Forms arbeitet man optimalerweise mit Daten-Bindungen.

U
26 Beiträge seit 2018
vor 6 Jahren

Getesteter Code:

In Form1:


public partial class Form1 : Form
    {
        private string _vorname;
        public string Vorname { get; set; }


private void CmdZeigeZwei_Click(object sender, EventArgs e)
        {
            Form2 fu = new Form2(this);
            fu.ShowDialog();
        }

        private void CmdAnzeigen_Click(object sender, EventArgs e)
        {
            // Kontrolle
            LblAnzeige.Text = Vorname + "";
        }

In Form2:

public partial class Form2 : Form
    {
        private Form1 fh;
// Den Form2-Konstruktor überladen:
public Form2(Form1 aufrufer)
        {
            fh = aufrufer;
            InitializeComponent();
        }

private void CmdZeigeEins_Click(object sender, EventArgs e)
        {
            fh.Vorname = "Herbert";
            fh.Show();
            Close();
        }

Ich habe das aus dem 'Einführung in C# mit Visual Studio 2017" Buch übernommen & etwas verändert.