Question
Barre de progression
- Johan
- Auteur du sujet
- Hors Ligne
- Membre senior
-
- Messages : 57
- Remerciements reçus 0
J'ai aléger mon appli avec les éléments que tu m'a donné
Cependant je bloque vraiment sur cette barre de progression.
J'ai essayé de prendre cet exemple : powershell-scripting.com/index.php?optio...283&catid=5#2283
C'est le seul que je comprend a peu pres (ou pas en fait)
J'ai simplement mi un $progressbar.value = 0 au début de ma fonction avec un $Form2.Showdialog() et un $progressbar.value += 1 dans ma boucle principale
Resultat, quand je clique sur valider, la barre s'affiche et il ne se passe rien, de plus, la requete ne démarre que quand je ferme cette barre de progression.
Je comprend vraiment rien !
Pourquoi n'est-ce pas aussi simple que d'incrémenté une variable dans une boucle ?
Je pense que cet exemple m'irais mais je ne comprend pas comment elle fonctionne et a quoi correspond chaque ligne
[code:1]$timer1.Enabled = $true
$progressbar1.value=0
$progressbar1.Minimum=0
$progressbar1.Maximum=100
$progressbar1.MarqueeAnimationSpeed=1
function OnTick_timer1($Sender,$e){
$timer1.Enabled = $false
1..100|% {$progressbar1.value =$_;Write-host $_;start-sleep -m 20}
$FrmTest15ProgressBarTimer.Close()
}
$timer1.Add_Tick( { OnTick_timer1 $timer1 $EventArgs} )
[/code:1]<br><br>Message édité par: VashQuiRit, à: 12/03/09 14:50
Connexion ou Créer un compte pour participer à la conversation.
- Laurent Dardenne
- Hors Ligne
- Modérateur
-
- Messages : 6311
- Remerciements reçus 68
Oui je voisJe comprend vraiment rien !
Mais as-tu lu la doc qui te permettrait de comprendre un peu mieux ?
VashQuiRit écrit:
Le principe semble identique mais l'affectation se fait par l'appel de la méthode PerformStep() qui elle déclenche la progression en additionnant la valeur de la propriété Step à la propriété Value.Pourquoi n'est-ce pas aussi simple que d'incrémenté une variable dans une boucle ?
VashQuiRit écrit:
Une chose à la fois si tu n'y vois pas d'inconvénients.Je pense que cet exemple m'irais mais je ne comprend pas comment elle fonctionne et a quoi correspond chaque ligne
Je te joins un code qui répond à ton besoin, je te laisse étudier la function OnClick_btnOk.
La valeur 3 correspond au nombre des checkbox présent sur la forme (les autres sont imbriqués dans un groupbox donc inaccessible avec la maniére de parcourir la liste des composants de la Form principale)
[code:1]$progressBar1.Maximum = 3[/code:1]
La pièce jointe TestCheckBox.zip est absente ou indisponible
Tutoriels PowerShell
Pièces jointes :
Connexion ou Créer un compte pour participer à la conversation.
- Johan
- Auteur du sujet
- Hors Ligne
- Membre senior
-
- Messages : 57
- Remerciements reçus 0
A quoi cossrespond $EventArgs, $sender, $e ? Ca sort un peu de nul part pour moi
En fait toi tu fait plusieurs fonctions, mais moi je peux pas sinon je ne pourrais pas incrementé la barre de progression (ma fonction genere est apelé quand je clique sur valider)
Sinon en m'inspirant de ce que tu m'a passé j'ai :
[code:1]$Form2 = new-object System.Windows.Forms.form
$Form2.ClientSize = new-object System.Drawing.Size(337, 331)
$Form2.Controls.Add($progressBar)
$Form2.Name = \"Form2\"
$Form2.Text = \"Progression \"[/code:1]
Si je comprend bien la je cré une box
[code:1]$progressBar = new-object System.Windows.Forms.ProgressBar
$progressBar.Name = \"progressBar1\"
$progressBar.Maximum = 100
$progressBar.Minimum = 0
$progressBar.Value = 0
$progressBar.Step = 1
$progressBar.TabIndex = 8
$progressBar.Size = new-object System.Drawing.Size(435, 28)[/code:1]
Je configure la barre de progression pour alé de 0 a 100 et ce pas tranche de 1
[code:1]function OnFormClosing_Form1($Sender,$e){
($_).Cancel= $False
}[/code:1]
Je sais présume que ca ferme la box de la progress bar une fois fini ?
Ensuite j'ai mis au début de ma fonction
[code:1] $ProgressBar.Value=0
Start-sleep 1
$Form2.Add_FormClosing( { OnFormClosing_Form1 $Form2 $EventArgs} )
$Form2.Add_Shown({$Form2.Activate()})
$Form2.ShowDialog()[/code:1]
Et dans ma boucle de recherche :
[code:1]$progressBar.PerformStep() Start-sleep -m 200 [/code:1]
Et a la fin de la fonction :
[code:1] $Form2.Dispose()[/code:1]
Dans ton exemple, ton maximum correspond au nombre de checkbox sur ta form, mais moi mon maximum est différent a chaque requete =/ ce n'est pas possible de le faire en % ?<br><br>Message édité par: VashQuiRit, à: 12/03/09 16:48
Connexion ou Créer un compte pour participer à la conversation.
- Laurent Dardenne
- Hors Ligne
- Modérateur
-
- Messages : 6311
- Remerciements reçus 68
On peut le dire comme ça ou aborder la programmation événementiel sous .NET/Winform.A quoi cossrespond $EventArgs, $sender, $e ? Ca sort un peu de nul part pour moi
Je préfére la première
VashQuiRit écrit:
Je te laisserai argumenter sur cette impossibilité...En fait toi tu fait plusieurs fonctions, mais moi je peux pas sinon je ne pourrais pas incrementé la barre de progression (ma fonction genere est apelé quand je clique sur valider)
Et pour rappel :
Laurnet Dardenne écrit:
VashQuiRit écrit:...
ensuite comme je n'ai pas une vue d'ensemble
...
oui.Si je comprend bien la je cré une box
VashQuiRit écrit:
Non.Je présume que ca ferme la box de la progress bar une fois fini ?
Le nom de la fonction OnFormClosing_Form1, qui est normé, porte sur l'objet $Form1.
Et oui, car tous les objets contenus dans une form sont supprimés lors de la suppression de la form. Dans un cas tu supprimes un détail, dans l'autre la totalité. Je te l'accorde, c'est une petite nuance.
VashQuiRit écrit:
Et si tu essayais d'adapter le code que je t'ai proposé ?Dans ton exemple, ton maximum correspond au nombre de checkbox sur ta form, mais moi mon maximum est différent a chaque requete =/ ce n'est pas possible de le faire en % ?
Si je peux me permettre un conseil, oublie 5 mn ton pb et concentre toi sur l'usage et la configuration de la progressBar. Et admet qu'il faille parfois \"perdre\" du temps pour en \"gagner\".
Une fois ceci fait, l'intégration dans le script existant se fera les doigts dans le nez.
Maintenant si tu veux arriver vite à ton résultat, je ne peux rien pour toi.
Tutoriels PowerShell
Connexion ou Créer un compte pour participer à la conversation.
- Johan
- Auteur du sujet
- Hors Ligne
- Membre senior
-
- Messages : 57
- Remerciements reçus 0
En gros quand t'appuie sur OK tu initialise la barre et ensuite tu avance de 1 pour chaque textbox présente et fait une requete si elle est coché.
J'ai essaié de l'adapté a mon script avec une requete ou je connais le nombre de fois ou la boucle se répéte mais mon appli passe toujours en \"pas de reponse\" quand je clic sur OK, Est-ce normal ?
En gros j'en suis a :
[code:1]$progressBar1.Maximum = 100
$progressBar1.Minimum = 0
$progressBar1.Value = 0
$progressBar1.Step = 25
$form_generation.Controls.Add($progressBar1)
$button_Valider_OnClick=
{
genere $button_Valider $EventArgs
}
function genere($Sender,$e)
{
$ProgressBar1.Value=0
Start-sleep 1
foreach {
$progressBar1.PerformStep()
Start-sleep -m 200
}
}
function OnFormClosing_Form_generation($Sender,$e)
{
($_).Cancel= $False
}
$Form_generation.Add_FormClosing( { OnFormClosing_Form1 $Form_generation $EventArgs} )
$Form_generation.Add_Shown({$Form_generation.Activate()})
$Form_generation.ShowDialog()| Out-Null
$Form_generation.Dispose()[/code:1]
Le foreach se répete donc 4 fois.
j'ai rajouté apres genere : $button_Valider $EventArgs et apres function genere : ($Sender,$e) sans trop comprendre.
Au final quand j'execute la requete, mon programme se fige et au bout de 3 minutes me sors la resultat et affiche la barre de progression remplie a fond.
Connexion ou Créer un compte pour participer à la conversation.
- Laurent Dardenne
- Hors Ligne
- Modérateur
-
- Messages : 6311
- Remerciements reçus 68
Voir le paragraphe \"Création du gestionnaire d'événement\" ici . Voir aussi ceci .J'essaie d'avancer mais je ne comprend pas a quoi sert $sender, $e et $eventargs.
VashQuiRit écrit:
Oui, bien que l'affectation à zero à vocation de réinitialiser la barre de progression car on peut déclencher l'événement + fois.En gros quand t'appuie sur OK tu initialise la barre et ensuite tu avance de 1 pour chaque textbox présente et fait une requete si elle est coché.
VashQuiRit écrit:
Aucune idée, aider sur du code inconnu, çà je ne sais pas faire.Est-ce normal ?
Pour
function genere($Sender,$e)
Cette fonction n'est pas un gestionnaire d'événement, de plus les arguments déclarés ne sont pas utilisés dans le corps de la function. Donc ici $Sender et $e n'ont pas de raison d'être.
foreach {
Là je ne comprend pas trop
1..10|foreach {
ou
foreach($Item in $Liste) {
VashQuiRit écrit:
Le mieux serait que tu postes ton script de test.Au final quand j'execute la requete, mon programme se fige
On gagnera du temps
Tutoriels PowerShell
Connexion ou Créer un compte pour participer à la conversation.
- Vous êtes ici :
-
Accueil
-
forum
-
PowerShell
-
Entraide pour les débutants
- Barre de progression