knuefi
Goto Top

TextBox einer anderen Form per Button befüllen

Ich benötige mal wieder eure Hilfe

ich möchte per Button eine textBox einer anderen Form (StartForm) mit bestimmten Text "Beispiel Text" befüllen.

Ich habe eine StartForm und eine Form 2, in der StartForm befindet sich eine textBox.
In der Form 2 habe ich ein ButtonNeustart der die komplette Application komplett restartet.

Ist es möglich, dass nach ButtonNeustart Click und Restart der Anwendung die textBox in der StartForm automatisch mit einen bestimmten Text befüllt wird?
Die textBox der StartForm darf nur nach dem ButtonNeustart Click mit den Text befüllt werden, bei einen normalen Start der Anwendung soll die textBox der StartForm leer bleiben.

Noch eine Frage:
in das Hauptfenster der Anwendung habe ich eine Yes No Abfrage für das Schließen der Anwendung eingebaut (FormClosing), ist es möglich das die Yes No Abfrage beim ButtonNeustart nicht abgefragt wird, und die Anwendung ohne Abfrage neu startet?

Gruß

Content-Key: 499484

Url: https://administrator.de/contentid/499484

Printed on: April 26, 2024 at 04:04 o'clock

Member: wiesi200
wiesi200 Sep 29, 2019 at 05:26:45 (UTC)
Goto Top
Hallo,

im Endeffekt musst du beim Click auf dem Button irgendwo außerhalb einen Flag hinterlegen. Config Datei, Registry oder sonst wo.
Diesen Fragst du bei "FormClosing" und Start der Anwendung ab und reagierst entsprechend darauf.

mehr nicht
Member: joehuaba
joehuaba Sep 30, 2019 updated at 06:33:29 (UTC)
Goto Top
Guten Morgen,

von der Vorgehensweise müsstest du das so umsetzen:

ButtonClick:
1. Start Form öffnen mit
StartForm-Name.Show()
2. Text Box füllen mit
StartForm-Name.TextBox-Name.Text = "DeinText"  
3. Form in der der Button hinterlegt ist schließen mit
Me.Close()

Danach sollte deine StartForm angezeigt werden, Textbox befüllt sein und deine Form2 geschlossen sein.
Edit: Nicht getestet, aber so würde ich ansetzen.

Gruß joehuba face-smile
Mitglied: 141320
Solution 141320 Sep 30, 2019 updated at 14:13:15 (UTC)
Goto Top
Hi.
Zitat von @wiesi200:
im Endeffekt musst du beim Click auf dem Button irgendwo außerhalb einen Flag hinterlegen. Config Datei, Registry oder sonst wo.
Es geht auch ohne externe Zwischenspeicherung. Und zwar so dass man der Anwendung den String per Anwendungs-Parameter übergibt.

Man ändert die Main() Methode der Anwendung in der program.cs erst mal so ab das diese Parameter akzeptiert.
Dann erstellt man noch eine öffentliche Variable in der man den String zwischenspeichert sofern er der Anwendung übergeben wurde
namespace MyForms {
    static class Program {
        public static string mystring;
        /// <summary>
        /// The main entry point for the application.
        /// </summary>
        [STAThread]
        static void Main(string args) {
            if (args.Length == 1) {
                mystring = args;
            }
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Application.Run(new Form1());
        }
    }
}
Dann im Code der Form1 prüft man diese Variable auf Inhalt und setzt den Inhalt der Textbox sofern sie nicht leer ist:
Form2 ruft man mit dem Inhalt des Strings der Textbox auf:
namespace MyForms {
    public partial class Form1 : Form {
        public Form1() {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e) {
            if (Program.mystring != "") {  
                textBox1.Text = Program.mystring;
            }
        }

        private void btnOpenForm2_Click(object sender, EventArgs e) {
            Form2 f = new Form2(textBox1.Text);
            f.ShowDialog(this);
        }
    }
}
Im Code der Form2 speichert man sich den übergebenen String zwischen und ruft man nun die Anwendung mit Parameter dem String als Parameter auf:
namespace MyForms {
    public partial class Form2 : Form {
        string s;
        public Form2() {
            InitializeComponent();
        }
        public Form2(string s) {
            InitializeComponent();
            this.s = s;
        }

        private void button1_Click(object sender, EventArgs e) {
            Process.Start(Application.ExecutablePath, s);
            Application.Exit();
        }
    }
}
Fertig.
Statt dem Übergeben des Strings an Form2 und Anpassung im Konstruktur, kann man natürlich auch eine globale Variable nutzen die man nach Ändern des Textes aktualisiert, das ist dann eine Frage des Geschmacks.

Gruß
Member: wiesi200
wiesi200 Sep 30, 2019 at 14:18:36 (UTC)
Goto Top
Mir schon klar das das was du schreibst funktioniert.
Nur: er will ja die Anwendung neu starten und dann sind die Info's die du in das Textfeld schreibst leider weg, wenn du die nicht irgenwo außerhalb der Anwendung speicherst.
Mitglied: 141320
141320 Sep 30, 2019 updated at 14:25:25 (UTC)
Goto Top
Zitat von @wiesi200:
Nur: er will ja die Anwendung neu starten und dann sind die Info's die du in das Textfeld schreibst leider weg, wenn du die nicht irgenwo außerhalb der Anwendung speicherst.
Nein sind sie nicht. Die Anwendung wird mit dem String als Commandline-Parameter neu gestartet. Und da er das ja nur haben will wenn die Anwendung über die zweite Form neu gestartet wird ist das ja auch kein Problem.

Zitat des TO

Zitat von @Knuefi:
Die textBox der StartForm darf nur nach dem ButtonNeustart Click mit den Text befüllt werden, bei einen normalen Start der Anwendung soll die textBox der StartForm leer bleiben.
Member: Knuefi
Knuefi Sep 30, 2019 updated at 14:59:12 (UTC)
Goto Top
erstmal Danke für eure Hilfe

Ich bin noch Unterwegs und habe auf die schnelle es so versucht:
 Login frm = new Login();
 frm.Show();
 frm.textBox1.Text = "MeinText";  


leider bekomme ich die andere, noch offene Form2 mit den Button Event nicht geschlossen face-smile.

Wenn ich Zuhause bin, dann habe ich mehr Zeit und kann die Vorschläge ausprobieren.
Member: Knuefi
Knuefi Oct 08, 2019 at 18:18:53 (UTC)
Goto Top
Danke für eure Hilfe, hat mir mal wieder weiter geholfen.
Ich habe jetzt mal beide Lösungen, Flag und Anwendungs-Parameter ausprobiert, läuft beides Perfekt.
Gruß