tag:blogger.com,1999:blog-3217290800307932781.post476362961460414956..comments2024-01-20T09:04:53.741+09:00Comments on PowerShellをはじめよう ~PowerShell入門~: PowerShellでユーザーフォームを作る - プログレスバー編 -TAKEhttp://www.blogger.com/profile/13932778576703270072noreply@blogger.comBlogger7125tag:blogger.com,1999:blog-3217290800307932781.post-29206950448735718952021-12-08T20:48:55.340+09:002021-12-08T20:48:55.340+09:00匿名様
コメントいただきありがとうございます。
また、3つの謎についてご教示いただき重ねてお礼申し上...匿名様<br />コメントいただきありがとうございます。<br />また、3つの謎についてご教示いただき重ねてお礼申し上げます。<br /><br />当ブログをご覧いただいているということで、とてもうれしく思います。<br />今後ともご愛顧のほど、よろしくお願いいたします。<br />管理人TAKEhttps://www.blogger.com/profile/13932778576703270072noreply@blogger.comtag:blogger.com,1999:blog-3217290800307932781.post-18297796239575168362021-12-07T18:57:08.260+09:002021-12-07T18:57:08.260+09:00だいぶ過去の記事のため、既に解決されているかもしれませんが、
謎1~謎3についてはPowerShel...だいぶ過去の記事のため、既に解決されているかもしれませんが、<br />謎1~謎3についてはPowerShellというより.NETの仕様となります。<br /><br />.NETは標準ではWindows クラシック表示(~Windows 2k)が用いられる仕様となっており、<br />WinXP以降のグラフィカルなフォームを用いる場合は<br />$Form作成前に以下のコマンドを唱えておく必要があります。<br />[System.Windows.Forms.Application]::EnableVisualStyles()<br /><br />よく参考にさせて頂いております。ありがとうございます。Anonymousnoreply@blogger.comtag:blogger.com,1999:blog-3217290800307932781.post-18222298462666557362016-03-27T11:36:02.132+09:002016-03-27T11:36:02.132+09:00ご回答ありがとうございます。
モードの違い、承知しました。ひとまず・・・メイン画面上に設けることにし...ご回答ありがとうございます。<br />モードの違い、承知しました。ひとまず・・・メイン画面上に設けることにしました。<br /><br />ところで、PSコンソール上から当該スクリプトを実行した場合も、マーキーはブロックになりますね。<br />なぜなんでしょう。。。Anonymousnoreply@blogger.comtag:blogger.com,1999:blog-3217290800307932781.post-58428007965702488342016-03-21T05:48:19.401+09:002016-03-21T05:48:19.401+09:00ソース拝見いたしました。
$Form.ShowDialog()以降のFor文が、フォームを閉じない...ソース拝見いたしました。<br /><br />$Form.ShowDialog()以降のFor文が、フォームを閉じないと処理されないということですが、その原因が判明致しました。<br /><br />当ブログではまだ触れていませんでしたが、フォームを表示する方法として「モーダル」と「モードレス」の2種類があります。<br /><br />モーダルは.ShowDialog()と記述し、モードレスは.Show()と記述します。<br />この違いをざっくりまとめると次の通りとなります。<br />①モーダル … フォームが閉じられるまで、ShowDialog()以降の処理が行われない。<br />②モードレス … フォームが閉じられなくても、Show()以降の処理が行われる。<br /><br />基本的にプログラムは上から順に処理を行っていきます。<br />上記スクリプトはモーダルで表示させていますので、ShowDialog()以降のFor文はフォームが閉じられるまで処理されなかったのです。<br /><br />したがって、ShowDialog()をShow()とすれば、プログレスバーは動き出し、メッセージボックスも表示されます。<br />ただし、その後フリーズしてしまいますのでご注意ください。<br />詳細は今後のブログ内で取り上げますが、フリーズするのは「メインとなるフォームはモーダルで表示させなければならない」というルールがあるからです。<br /><br />以上、ご参考のほど、宜しくお願い致します。<br />TAKEhttps://www.blogger.com/profile/13932778576703270072noreply@blogger.comtag:blogger.com,1999:blog-3217290800307932781.post-66330027746804202252016-03-21T02:27:46.939+09:002016-03-21T02:27:46.939+09:00ご返信ありがとうございます。
ソースコードですが、記事を拝見して、「こんな感じ?」とサラッと記述...ご返信ありがとうございます。<br /><br /><br />ソースコードですが、記事を拝見して、「こんな感じ?」とサラッと記述しただけなので、<br />正直、まじめに書いた内容ではありませんが。。。。<br />ごく単純に、(最初は)記事にあるfor文を、ボタンイベントではなく、外に単独で<br />切り出したカタチが、私が期待する最終形にほぼ等しい構成となります。<br /><br />Write-Progressの時同様に、ループ分の処理中に、プログレス値を更新すれば<br />動くと思っていました。<br /><br />以下、その内容です。よろしくお願い申し上げます。<br /><br /><br /># プログレスバー<br /><br />Add-Type -AssemblyName System.Windows.Forms<br /><br />$Form = New-Object System.Windows.Forms.Form<br />$Form.Size = "300,200"<br />$Form.Startposition = "CenterScreen"<br />$Form.Text = "プログレスバーのテスト"<br /><br />$Button = New-Object System.Windows.Forms.Button<br />$Button.Location = "110,20"<br />$Button.Size = "80,30"<br />$Button.Text = "開始"<br /><br /># プログレスバー<br />$Bar = New-Object System.Windows.Forms.ProgressBar<br />$Bar.Location = "10,100"<br />$Bar.Size = "260,30"<br />$Bar.Maximum = "10"<br />$Bar.Minimum = "0"<br />$Bar.Style = "Blocks"<br /><br /># ボタンのクリックイベント<br />#$Start = {<br /># For ( $i = 0 ; $i -lt 10 ; $i++ )<br /># {<br /># $Bar.Value = $i+1<br /># start-sleep -s 1<br /># }<br /># [System.Windows.Forms.MessageBox]::Show("完了しました", "info")<br />#}<br />#$Button.Add_Click($Start)<br />#<br />$Form.Controls.AddRange(@($Bar,$Button))<br /><br />$Form.ShowDialog()<br /><br /> For ( $i = 0 ; $i -lt 10 ; $i++ )<br /> {<br /> $Bar.Value = $i+1<br /> start-sleep -s 1<br /> }<br /> [System.Windows.Forms.MessageBox]::Show("完了しました", "info")<br /><br /><br />Anonymousnoreply@blogger.comtag:blogger.com,1999:blog-3217290800307932781.post-47172356578111458202016-03-20T16:21:26.364+09:002016-03-20T16:21:26.364+09:00コメントありがとうございます。
大変恐縮ですが、いただきましたコメント内容だけでは原因を掌握しかね...コメントありがとうございます。<br /><br />大変恐縮ですが、いただきましたコメント内容だけでは原因を掌握しかねます。<br />そこで、差し支えない部分だけで結構ですので、作成されたスクリプトファイルの内容をみせていただけないでしょうか。<br /><br />コメント欄への記載でも直接メールでも構いません。<br /><br />できるだけご助力させていただきたいと思いますので、ご検討の程、宜しくお願い致します。TAKEhttps://www.blogger.com/profile/13932778576703270072noreply@blogger.comtag:blogger.com,1999:blog-3217290800307932781.post-87708211648437993252016-03-20T16:13:16.041+09:002016-03-20T16:13:16.041+09:00PSに元からあるWrite-Progressと、この記事のプログレスバーと入れ替えたいのですが、
う...PSに元からあるWrite-Progressと、この記事のプログレスバーと入れ替えたいのですが、<br />うまく機能しません。<br />お知恵を拝借できますでしょうか。<br /><br />ロジックとしては、掲載いただいたFormを表示して、<br />その後に、foreachでメイン処理を行い、その中で$Bar.Valueを<br />発行しています。<br /><br />症状としては、Formは表示されますが、<br />1.プログレス表示は更新されない。<br />2.Formが表示されている間、メインのforeach処理は<br />全く動かない(Formを閉じると動き出す)<br /><br />Form On Load的なイベントを組み込んでメインのforeachを<br />使うべきでしょうか。。。。<br /><br />お助けいただけますと幸いです。<br /><br />Anonymousnoreply@blogger.com