Bonjour

Je suis confronté pour la deuxieme fois au meme problème sans bien savoir comment l'affronter

J'aimerais afficher une form modale depuis un select dans un toolstripmenu

Demarer automatiquement un process dans cette form
Le process est une boucle qui dure +/- 3 secondes par iteration
A chaque iteration (+/- 200 ) je veux afficher une info dans trois text box

Rien de bien sorcier mais j'ai quand meme pas mal ramé

1- Impossible d'avoir un affichage correct de la form si je lance le process sur l'event shown (qui me semble le plus approprié) : tant pis j'ai mis un bouton de demarage mais j'aurais voulu m'en passer

2- Obligation de faire des refresh de chaque control a chaque changement de texte (dans quelle situation est-ce vraiment nécessaire ?)

3- Necessité de faire un doevent a chaque itération pour permetre l'usage d'un bouton stop (idem : dans quelle situation est-ce vraiment nécessaire ?)


In Fine :

Afin de m'assurer que je n'ai pas fait trop de conneries conceptuelles je poste mon code ci joint

J'ai un bouton a usage start / stop



Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.IO;
using System.Globalization;
 
 
namespace Recutex
{
  public partial class frm_Dist : Form
  {
    public frm_Dist()
    {
      InitializeComponent();
    }
 
    bool Started = false;
 
    public void KmAllRit()
    {
 
      AllKM Ak = new AllKM();
 
      StreamWriter sw = new StreamWriter("c:/tripy/rit/allkm.txt", false);
 
      string Sel = "SELECT "
                + "`address`.`X`,"
                + "`address`.`Y`,"
                + "`address`.`addrID`,"
                + "`tours`.`order1`"
                + "FROM "
                + "`address` "
                + " Inner Join `tours` ON `address`.`addrID` = `tours`.`addrID` "
                + " Where chauffeurid={0} and dag={1} order by order1";
      Query qr = new Query();
      DataTable dtDagChauff = qr.selectX("select distinct chauffeurid,dag from tours order by chauffeurId,dag");
 
      string select = "";
 
      for (int i = 0; i < dtDagChauff.Rows.Count; i++)
      {
        DataRow cRow = dtDagChauff.Rows[i];
        string Dag = cRow["Dag"].ToString();
        string Chauff = cRow["chauffeurID"].ToString();
        if (Dag == "0" || Chauff == "0" || Chauff == "1")
        {
          continue;
        }
 
        select = string.Format(Sel, Chauff, Dag);
        DataTable dt = qr.selectX(select);
        double dist = Ak.calc_KMX(dt);
 
        this.txb_Dist.Text = String.Format("{0:0.00}", dist);
        this.txb_Dist.Refresh();
 
        this.txb_dag.Text = Dag;
        this.txb_dag.Refresh();
 
        this.txb_chauff.Text = Chauff;
        this.txb_chauff.Refresh();
 
 
        dt.Dispose();
        sw.WriteLine(string.Format("{0}\t{1}\t{2}", Chauff, Dag, dist));
        sw.Flush();
        Application.DoEvents();
        if (!Started)
        {
          break;
        }
      }
      sw.Close();
    }
 
    private void btn_StartStop_Click(object sender, EventArgs e)
    {
      if (!Started)
      {
        Started = true;
        btn_StartStop.Text = "Stop";
        btn_StartStop.BackColor = Color.Red;
        btn_StartStop.Refresh();
        KmAllRit();
      }
      else
      {
        Started = false;
        btn_StartStop.Text = "Start";
        btn_StartStop.BackColor = SystemColors.Control;
        btn_StartStop.Refresh();
      }
    }
  }
}