C# Deux fenêtres

Statut
N'est pas ouverte pour d'autres réponses.

cyse

Elite
Hello ^^ Je connais rien en dotnet et j'au voulu voir un peu à quoi ça ressemble, donc j'ai téléchargé visual C# express 2005 qui est gratuit, et en essayant j'ai trouvé çà tellement confortable que je me suis attardé :p je connais pas le langage donc c'est surement très con comme problème mais ça m'énèrve de pas trouver !

Donc en faites c'est un programme, quand on clique sur un bouton, ca ouvre une autres fenêtre ou l'on peut introduire du texte, puis quand on clique sur OK, la deuxième fenêtre se ferme et je récupère le texte dans la première fenêtre.

Le problème c'est que la deuxième fenêtre plante à cause de la boucle while... :'(

voici la première :
quand on clique sur le bouton, ça fait un nouveau thread, ce nouveau thread ouvre la deuxième fenêtre et fait une boucle while tant qu'on a pas appuyé sur OK dans la deuxième fenêtre :
Code:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Threading;

namespace esquisse
{
    public partial class Form1 : Form
    {
        private String element = "";
        private Thread _panel;

        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            _panel = new Thread(new ThreadStart(ThrFunc1));
            _panel.Start();
            _panel.
        }

        private void ThrFunc1()
        {
            Form2 dial = new Form2();
            dial.Show();
            while (!dial.getStatut())
            {
                Thread.Sleep(400);
            }
            element = dial.getElement();
        }
    }
}
La deuxième :
Code:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

namespace esquisse
{
    public partial class Form2 : Form
    {
        private String element;
        private bool statut = false;

        public Form2()
        {
            InitializeComponent();
        }

        private void button2_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            element = textBox1.Text;
            this.statut = true;
        }

        public bool getStatut()
        {
            return statut;
        }

        public String getElement()
        {
            return element;
        }
    }
}
j'ai fais un nouveau thread en me disant ça empêchera au while de faire lagguer (bien qu'avec le sleep ça devrait pas arriver) mais sans succès :-(

zen pensez quoi ?
 

Jereck

Α & Ω
Staff
Code:
private void button1_Click(object sender, EventArgs e){
	Form2 f = new Form2();
	f.showDialog(this);
	element = f.getElement();
}
Pas besoin de se casser les *tût* avec des threads (surtout qu'un thread est déjà crée avec le new Form2() en fait). Sinon, le bug ne viens pas de ton while(), c'est inhérent au comportement du C#, si tu veux faire ça avec des threads, tu dois passer par un délégué (delegate) mais je peux pas (encore) t'aider là-dessus.
 
1er
OP
cyse

cyse

Elite
ah merci ça marche avec ShowDialog ;) c'est 2 fois plus simple comme ça ! en fait avec show dialog il attend que le form soit terminé avant de continuer ses instructions
 

zoheir

cvm.mangaleet()
Pas besoin de faire de "this.Close()". Dans le designer tu peux paramétrer les boutons "acceptbutton" et "cancelbutton".
 

Jereck

Α & Ω
Staff
cvm の術 a dit:
Pas besoin de faire de "this.Close()". Dans le designer tu peux paramétrer les boutons "acceptbutton" et "cancelbutton".
Ça marche dans les deux sens ?
 
Statut
N'est pas ouverte pour d'autres réponses.
Haut