Question
utilisation d'une System.Windows.Forms.ProgressBar
- caillebotte
- Auteur du sujet
- Hors Ligne
- Nouveau membre
Réduire
Plus d'informations
- Messages : 2
- Remerciements reçus 0
il y a 16 ans 7 mois #2283
par caillebotte
utilisation d'une System.Windows.Forms.ProgressBar a été créé par caillebotte
Bonjour,
Je viens d'utiliser votre \"PowerShell Form Converter\" afin de générer une IHM contenant une barre progression, mais je n'arrive pas à faire évoluer sa valeur en temps
voici mon code, d'avance merci
[System.Reflection.Assembly]::LoadWithPartialName(\"System.windows.forms\")
$progressBar = new-object System.Windows.Forms.ProgressBar
#
# progressBar
#
$progressBar.Location = new-object System.Drawing.Point(32, 48)
$progressBar.Name = \"progressBar\"
$progressBar.Size = new-object System.Drawing.Size(271, 23)
$progressBar.TabIndex = 3
$progressbar.value=50
$Form2 = new-object System.Windows.Forms.form
# Form1
#
$Form2.ClientSize = new-object System.Drawing.Size(337, 331)
$Form2.Controls.Add($progressBar)
$Form2.Name = \"Form2\"
$Form2.Text = \"Progression \"
$Form2.Showdialog()
while ($i -ne 100 )
{
$progressbar.value = $i
$i = $i +1
}
Je viens d'utiliser votre \"PowerShell Form Converter\" afin de générer une IHM contenant une barre progression, mais je n'arrive pas à faire évoluer sa valeur en temps
voici mon code, d'avance merci
[System.Reflection.Assembly]::LoadWithPartialName(\"System.windows.forms\")
$progressBar = new-object System.Windows.Forms.ProgressBar
#
# progressBar
#
$progressBar.Location = new-object System.Drawing.Point(32, 48)
$progressBar.Name = \"progressBar\"
$progressBar.Size = new-object System.Drawing.Size(271, 23)
$progressBar.TabIndex = 3
$progressbar.value=50
$Form2 = new-object System.Windows.Forms.form
# Form1
#
$Form2.ClientSize = new-object System.Drawing.Size(337, 331)
$Form2.Controls.Add($progressBar)
$Form2.Name = \"Form2\"
$Form2.Text = \"Progression \"
$Form2.Showdialog()
while ($i -ne 100 )
{
$progressbar.value = $i
$i = $i +1
}
Pièces jointes :
Connexion ou Créer un compte pour participer à la conversation.
- VICTORIN
- Hors Ligne
- Nouveau membre
Réduire
Plus d'informations
- Messages : 5
- Remerciements reçus 0
il y a 16 ans 7 mois #2284
par VICTORIN
Réponse de VICTORIN sur le sujet Re:utilisation d'une System.Windows.Forms.Progress
Salut Gustave,
Ton while est mal placé car la fonction showdialog empeche son execution.
Il faut soit le mettre avant le showdialog mais tu ne verra pas la progression, soit le mettre dans un evenement click d'un bouton que tu rajoutes sur ta fenetre.
Ton while est mal placé car la fonction showdialog empeche son execution.
Il faut soit le mettre avant le showdialog mais tu ne verra pas la progression, soit le mettre dans un evenement click d'un bouton que tu rajoutes sur ta fenetre.
Connexion ou Créer un compte pour participer à la conversation.
- Robin Lemesle
- Hors Ligne
- Modérateur
Réduire
Plus d'informations
- Messages : 260
- Remerciements reçus 0
il y a 16 ans 7 mois #2285
par Robin Lemesle
Robin MVP PowerShell
Réponse de Robin Lemesle sur le sujet Re:utilisation d'une System.Windows.Forms.ProgressBar
Hello gustave !
Mauvais forum, je déplace le post.
Sinon pour ta question, j'ai plusieurs interrogations?
- Pourquoi vouloir faire démarrer une progressbar à vide avec un while ?
- Pourquoi utiliser une form pour faire ca (je pense aux progress bar dans la console \"write-progress\", il y a un tuto dessus sur ce site) ?
Sinon, si tu tiens absolument à ta formule, il existe une technique qui repose sur la notion de runspace. Voici le liens ou janel explique le fonctionnement. janel.spaces.live.com/blog/cns!9B5AA3F6FA0088C2!187.entry
Mauvais forum, je déplace le post.
Sinon pour ta question, j'ai plusieurs interrogations?
- Pourquoi vouloir faire démarrer une progressbar à vide avec un while ?
- Pourquoi utiliser une form pour faire ca (je pense aux progress bar dans la console \"write-progress\", il y a un tuto dessus sur ce site) ?
Sinon, si tu tiens absolument à ta formule, il existe une technique qui repose sur la notion de runspace. Voici le liens ou janel explique le fonctionnement. janel.spaces.live.com/blog/cns!9B5AA3F6FA0088C2!187.entry
Robin MVP PowerShell
Connexion ou Créer un compte pour participer à la conversation.
- Laurent Dardenne
- Hors Ligne
- Modérateur
Réduire
Plus d'informations
- Messages : 6302
- Remerciements reçus 68
il y a 16 ans 7 mois #2287
par Laurent Dardenne
Tutoriels PowerShell
Réponse de Laurent Dardenne sur le sujet Re:utilisation d'une System.Windows.Forms.ProgressBar
Salut,
Robin écrit:
powershellcommunity.org/Blogs/CommunityB...ryID/43/Default.aspx
www.microsoft.com/technet/scriptcenter/r...mar08/pstip0321.mspx
technet.microsoft.com/en-us/magazine/cc194398.aspx
Robin écrit:
www.leeholmes.com/blog/RealtimeSyntaxHig...werShellConsole.aspx
Elle prend en compte le partage de donnée entre les 2 runspaces.
Je comptais ajouter ce module dans le script Convert-Form, faut que j'étudie la question...
vinz2k écrit:
Première idée, un timer :
[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]
Cela fonctionne, l'événement est crée par le script et ici le timer est déclenché automatiquement. En fin de traitement on ferme la forme.
Attention à modifier le code avant l'exécution du script généré
Seconde idée, utiliser le gestionnaire d'événement Add_Shown impléménté par défaut.
On ajoute l'appel d'un scriptBlock :
[code:1]
$FrmTest15ProgressBarTimer.Add_Shown({$FrmTest15ProgressBarTimer.Activate();&$Sb})
[/code:1]
Le contenu du ScriptBlock est identique à celui contenu dans l'événement du timer :
[code:1]
$Sb={
#On connait le nombre d'item
1..100|% {$progressbar1.value =$_;Write-host $_;start-sleep -m 20}
$progressbar1.value=0
$FrmTest15ProgressBarTimer.Close()
}
[/code:1]
Vous remarquerez qu'on peut afficher dans la console tout en ayant la fenêtre au premier plan
Dans le fichier joint il y a 2 autres cas de progression. Le pb est qu'on doit connaitre la borne maximum.
Maintenant je ne sais pas si cela répond à tous les cas.
Robin écrit:
Voir aussi :Pourquoi utiliser une form pour faire ca (je pense aux progress bar dans la console \"write-progress\", il y a un tuto dessus sur ce site) ?
powershellcommunity.org/Blogs/CommunityB...ryID/43/Default.aspx
www.microsoft.com/technet/scriptcenter/r...mar08/pstip0321.mspx
technet.microsoft.com/en-us/magazine/cc194398.aspx
Robin écrit:
Quitte à utiliser cette technique autant partir de la version suivante :il existe une technique qui repose sur la notion de runspace.
www.leeholmes.com/blog/RealtimeSyntaxHig...werShellConsole.aspx
Elle prend en compte le partage de donnée entre les 2 runspaces.
Je comptais ajouter ce module dans le script Convert-Form, faut que j'étudie la question...
vinz2k écrit:
On peut éviter cette approche et automatiser le déclenchement de la progression.soit le mettre dans un evenement click d'un bouton que tu rajoutes sur ta fenetre.
Première idée, un timer :
[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]
Cela fonctionne, l'événement est crée par le script et ici le timer est déclenché automatiquement. En fin de traitement on ferme la forme.
Attention à modifier le code avant l'exécution du script généré
Seconde idée, utiliser le gestionnaire d'événement Add_Shown impléménté par défaut.
On ajoute l'appel d'un scriptBlock :
[code:1]
$FrmTest15ProgressBarTimer.Add_Shown({$FrmTest15ProgressBarTimer.Activate();&$Sb})
[/code:1]
Le contenu du ScriptBlock est identique à celui contenu dans l'événement du timer :
[code:1]
$Sb={
#On connait le nombre d'item
1..100|% {$progressbar1.value =$_;Write-host $_;start-sleep -m 20}
$progressbar1.value=0
$FrmTest15ProgressBarTimer.Close()
}
[/code:1]
Vous remarquerez qu'on peut afficher dans la console tout en ayant la fenêtre au premier plan
Dans le fichier joint il y a 2 autres cas de progression. Le pb est qu'on doit connaitre la borne maximum.
Maintenant je ne sais pas si cela répond à tous les cas.
La pièce jointe progress.ps1 est absente ou indisponible
Tutoriels PowerShell
Pièces jointes :
Connexion ou Créer un compte pour participer à la conversation.
- caillebotte
- Auteur du sujet
- Hors Ligne
- Nouveau membre
Réduire
Plus d'informations
- Messages : 2
- Remerciements reçus 0
il y a 16 ans 7 mois #2288
par caillebotte
Réponse de caillebotte sur le sujet Re:utilisation d'une System.Windows.Forms.Progress
Merci pour toutes ces informations qui réponde à mes interrogations
Connexion ou Créer un compte pour participer à la conversation.
Temps de génération de la page : 0.112 secondes
- Vous êtes ici :
- Accueil
- forum
- PowerShell
- Entraide pour les débutants
- utilisation d'une System.Windows.Forms.ProgressBar