0
votes

Remplir une zone de texte dans un formulaire déjà ouvert

J'ai besoin d'aide, s'il vous plaît. J'ai fait beaucoup de recherches, mais je n'ai trouvé aucune réponse qui s'applique à moi.

Considérez 2 formes: MainWindow et Form2. MainWindow contient une zone de texte et des étiquettes qui affichent des informations. Form2 contient également une zone de texte, mais est conçu pour effectuer des tâches chronophages. Dans ce formulaire2, je veux transmettre la valeur d'un selectedItem (une chaîne), à ​​ma zone de texte MainWindow, et exécuter une méthode dessus.

Je peux le faire en chargeant ou en ouvrant une nouvelle MainWindow, mais je ne veux pas faire cela. Les deux formulaires peuvent être (et seront) ouverts en même temps.

Comment puis-je faire cela s'il vous plaît? Faites-moi savoir si je ne suis pas précis.


4 commentaires

Ceci est en partie lié à cette question. Mais si votre méthode prend du temps, vous ne pouvez pas l'exécuter sur le thread d'interface utilisateur, mais utiliser quelque chose comme des tâches, en fonction du cadre d'interface utilisateur que vous utilisez.


Si je vous comprends bien, votre Form2 a besoin d'une référence à MainWindow et MainWindow a besoin d'une fonctionnalité / propriété pour transmettre la valeur à (à partir de Form2)


S'agit-il d'un projet Web ou d'un bureau? Si projet Web, déclarez une variable globale dans votre fichier common.js.


Je suppose que j'ai mal expliqué mon problème. C'est une application de bureau. Ce que je dois faire est finalement assez simple en quelques mots: mettre à jour un textbox.text d'un formulaire vers un autre formulaire, qui sont tous les deux ouverts en même temps.


3 Réponses :


0
votes

Dans MainWindow:

(this.Owner as MainWindow).DoSomething();

Dans Form2

(this.Owner as MainWindow).Text = textBox1.Text;

Ou appelez:

private void button1_Click_1(object sender, EventArgs e)
{
    var f = new Form2();
    f.Owner = this;
    f.ShowDialog(/*this*/);
}


1 commentaires

Malheureusement, cela ne fonctionne pas. Premièrement, Showdialog n'accepte pas l'argument: (Deuxièmement, dans le formulaire 2, il me renvoie une NullReferenceException.



0
votes

Si vous n'avez qu'une seule MainWindow, vous pouvez simplement créer un lien statique vers l'instance de votre MainWindow

MainWindow

    if ( MainWindow.Instance != null )
            MainWindow.Instance.textBox1.Text = "Hello";

Form2

    public static MainWindow Instance { get; private set; }

    public MainWindow()
    {
        InitializeComponent();

        Instance = this;
    }

Bien sûr, cela ne fonctionnera probablement que s'ils sont ouverts dans le même fil de discussion.


0 commentaires

0
votes

Je trouve enfin comment faire cela.

J'ai suivi un tutoriel vidéo qui s'applique parfaitement à mon problème: https://www.youtube .com / watch? v = Tu07ubhxyfY

Après quelques ajustements, cela fonctionne très bien.

Merci beaucoup pour les réponses.


0 commentaires