C# String von Form2 zu Form1 schicken

  • C#

Es gibt 11 Antworten in diesem Thema. Der letzte Beitrag () ist von ErfinderDesRades.

    C# String von Form2 zu Form1 schicken

    Moin,

    Wie bringe ich von Form2 zu Form1 ganz unkompliziert einen String rüber?

    Die Werte schicke ich bereits so von Form1 zu Form2:

    FORM1:

    C#-Quellcode

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


    FORM2:

    C#-Quellcode

    1. public partial class FrmAlternative : Form
    2. {
    3. public string Anform2Str1
    4. {
    5. get { return TxtStrasse1.Text; }
    6. set { TxtStrasse1.Text = value; }
    7. }
    8. }


    -------------------------------------------------------------

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

    FORM2:

    C#-Quellcode

    1. private void CmdUebertragen_Click(object sender, EventArgs e)
    2. {
    3. //Übertragung an Form1
    4. FrmDokPrint Form1uebergang = new FrmDokPrint();
    5. Form1uebergang.Anform1Str1 = TxtStrasse1.Text;
    6. }


    FORM1:

    C#-Quellcode

    1. //Retour
    2. public string Anform1Str1
    3. {
    4. get { return TxtStrasse.Text; }
    5. set { TxtStrasse.Text = value; }
    6. }



    Mir ist klar, der Befehl:

    C#-Quellcode

    1. FrmDokPrint Form1uebergang = new FrmDokPrint();

    öffnet die Form1 einfach komplett neu.
    Aber das will ich ja nicht, ich will nur in der bereits im hintergrund geöffneten Form1 den neuen String "TxtStrasse.Text" geben?

    Wenn ich nach diesem Thema Google kommen einige ziemlich komplizierte Varianten :S Blick da nicht so wirklich durch ?(
    @newsletter Wenn Du hier ein neues Darstellungsformat für Code entwickelt hast, solltest Du Dich bei Markus melden.
    Falls Du einfach nur das CS-Format meinst, nimm [ cs ][ /cs ] (der C#-Button).
    =====
    Die Primärform instanziiert die Sekundärform und kann Variablen per Properties übertragen.
    Rückwärts kannst Du die Variable einfach per Property abholen, wenn der Dialog zugemacht wurde (modal)
    oder Du sendest ein Event, dass die Primärform weiß, dass ein Wert abzuholen ist (nicht modal).
    Mit den geeigneten EventArgs kannst Du den Wert gleich mit übertragen.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Hast du da evtl ein kleines Beispiel wie man einen einfachen String "hallo" von Form2 zu Form1 bringt :/
    Kann doch nicht so schwierig sein :huh:

    Liegt in meinem Programm nicht einfach ein kleiner Denkfehler? (Irgendwie VorhandeneForm1Instanz öffnen, nicht Form1InstanzNeuGenerieren :huh:

    Beim googeln steht oft das ich ein eigenes Event erzeugen muss...

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „newsletter“ ()

    @newsletter So was:
    Form1

    C#-Quellcode

    1. using System;
    2. using System.Windows.Forms;
    3. namespace WindowsFormsApplication1
    4. {
    5. public partial class Form1 : Form
    6. {
    7. private Form2 Dlg;
    8. public Form1()
    9. {
    10. InitializeComponent();
    11. }
    12. private void button1_Click(object sender, EventArgs e)
    13. {
    14. using (Form2 dlg = new Form2())
    15. {
    16. dlg.TransferText += dlg_TransferText1;
    17. dlg.ShowDialog();
    18. }
    19. }
    20. private void button2_Click(object sender, EventArgs e)
    21. {
    22. if (this.Dlg == null || this.Dlg.IsDisposed)
    23. {
    24. this.Dlg = new Form2();
    25. this.Dlg.TransferText += dlg_TransferText2;
    26. }
    27. if(!this.Dlg.Visible)
    28. {
    29. this.Dlg.Show();
    30. }
    31. }
    32. void dlg_TransferText1(object sender, TextEventArgs e)
    33. {
    34. this.label1.Text = e.Text;
    35. }
    36. void dlg_TransferText2(object sender, TextEventArgs e)
    37. {
    38. this.label2.Text = e.Text;
    39. }
    40. }
    41. }
    Form2

    C#-Quellcode

    1. using System;
    2. using System.Windows.Forms;
    3. namespace WindowsFormsApplication1
    4. {
    5. public partial class Form2 : Form
    6. {
    7. public event EventHandler<TextEventArgs> TransferText = delegate { };
    8. public Form2()
    9. {
    10. InitializeComponent();
    11. }
    12. private void button1_Click(object sender, EventArgs e)
    13. {
    14. this.TransferText(this, new TextEventArgs("Hallo World"));
    15. }
    16. }
    17. public class TextEventArgs
    18. :EventArgs
    19. {
    20. public string Text { get; private set; }
    21. public TextEventArgs(string txt)
    22. {
    23. this.Text = txt;
    24. }
    25. }
    26. }
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    MichaHo schrieb:

    Ist Crossposting nicht verboten?? mycsharp.de/wbb2/thread.php?threadid=120167


    Da kannst du aber froh sein, dass Klugscheisserei nicht verboten ist ;)

    Einfach gesagt:
    Bin auf der suche nach einfachen Lösungsansätzen und habe hierfür keine Zeit um einen Monat am gleichen Thema zu forschen. Alles was ich selbst nicht umsetzen kann, geht weiter an Freelancer, wenn unbedingt notwendig. Also sollte es klar sein, dass ich ab und zu mehrere Kanäle zur Findung beanspruchen muss.
    Punkt 1 ist es keine Klugscheißerei, Punkt 2 hast Du im Crosspost bereits eine Lösung erhalten, bzw. hilfe zur Selbsthilfe und trotzdem postest Du 10 Minuten später hier um eine Lösung zu erhalten.
    Das ist Ausnutzung von Freizeit der Helfenden!
    "Hier könnte Ihre Werbung stehen..."

    newsletter schrieb:

    Bin auf der suche nach einfachen Lösungsansätzen und habe hierfür keine Zeit um einen Monat am gleichen Thema zu forschen.


    Super Einstellung hast du da. Hier im Forum wird in der Regel "Hilfe zur Selbsthilfe" gegeben. Wir wollen hier nicht einfach fertige Lösung hinwerfen sondern langfristig helfen, ganz nach dem Motto:

    Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. Lehre einen Mann zu fischen und du ernährst ihn für sein Leben.
    "Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. Lehre einen Mann zu fischen und du ernährst ihn für sein Leben."

    Wie debugge ich richtig? => Debuggen, Fehler finden und beseitigen
    Wie man VisualStudio nutzt? => VisualStudio richtig nutzen
    Die Lösung von @RodFromGermany hat mir weitergeholfen. Die mycsharp-Lösung ist zu lange. (auch meine Arbeitszeiten gehen nicht beliebig lange.)

    @mrMo: Im Csharpforum gibt es von mir gerademal 7 Beiträge. Also kann nicht von massivem Crossposting die Rede sein. ;)

    @MichaMo: Nein, es ist effektiver um schneller zu einer Lösung zu kommen. Ich musste gestern die Arbeit abgeben.

    Am Montag soll ich entweder daran weiterarbeiten oder die Automatisierung genügt. Es macht einen Unterschied, ob man noch einen Monat Zeit hat oder per sofort was her muss. Es ist ja immer schön, wenns perfekt geschrieben und verstanden ist. An diesem Punkt musste es einfach "funktionieren". Ob variablen nun public sind in einer Klasse spielt dort keine Rolle. Das kann man später wieder korrigieren.
    Lerne die Grundlagen, dann hast du mehr Zeit sauber zu programmieren.
    "Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. Lehre einen Mann zu fischen und du ernährst ihn für sein Leben."

    Wie debugge ich richtig? => Debuggen, Fehler finden und beseitigen
    Wie man VisualStudio nutzt? => VisualStudio richtig nutzen