プログレスバーをマーキースタイルで実行する

処理にかかる時間が不明な場合、プログレスバーをマーキー(Marquee)スタイルで実行するのが自然だ。その処理をどう書くか?

マーキースタイルのプログレスバーは表示を開始した時点から動き始める。止める方法が分からなかったので、処理を始めるときに表示して、処理が終わるときに表示をやめるようにした。コードは以下の通り。

import System.Drawing
import System.Windows.Forms

from System.Drawing import *
from System.Windows.Forms import *

class MainForm(Form):
    def __init__(self):
        self.InitializeComponent()
   
    def InitializeComponent(self):
        self._statusStrip1 = System.Windows.Forms.StatusStrip()
        self._toolStripProgressBar = System.Windows.Forms.ToolStripProgressBar()
        self._buttonStart = System.Windows.Forms.Button()
        self._buttonStop = System.Windows.Forms.Button()
        self._toolStripStatusLabel1 = System.Windows.Forms.ToolStripStatusLabel()
        self._statusStrip1.SuspendLayout()
        self.SuspendLayout()
        #
        # statusStrip1
        #
        self._statusStrip1.Items.AddRange(System.Array[System.Windows.Forms.ToolStripItem](
            [self._toolStripProgressBar,
            self._toolStripStatusLabel1]))
        self._statusStrip1.Location = System.Drawing.Point(0, 240)
        self._statusStrip1.Name = "statusStrip1"
        self._statusStrip1.Size = System.Drawing.Size(284, 22)
        self._statusStrip1.TabIndex = 0
        self._statusStrip1.Text = "statusStrip1"
        #
        # toolStripProgressBar
        #
        self._toolStripProgressBar.MarqueeAnimationSpeed = 200
        self._toolStripProgressBar.Name = "toolStripProgressBar"
        self._toolStripProgressBar.Size = System.Drawing.Size(100, 16)
        self._toolStripProgressBar.Style = System.Windows.Forms.ProgressBarStyle.Marquee
        self._toolStripProgressBar.Visible = False
        #
        # buttonStart
        #
        self._buttonStart.Location = System.Drawing.Point(56, 53)
        self._buttonStart.Name = "buttonStart"
        self._buttonStart.Size = System.Drawing.Size(175, 50)
        self._buttonStart.TabIndex = 1
        self._buttonStart.Text = "start"
        self._buttonStart.UseVisualStyleBackColor = True
        self._buttonStart.Click += self.ButtonStartClick
        #
        # buttonStop
        #
        self._buttonStop.Location = System.Drawing.Point(56, 143)
        self._buttonStop.Name = "buttonStop"
        self._buttonStop.Size = System.Drawing.Size(175, 50)
        self._buttonStop.TabIndex = 2
        self._buttonStop.Text = "stop"
        self._buttonStop.UseVisualStyleBackColor = True
        self._buttonStop.Click += self.ButtonStopClick
        #
        # toolStripStatusLabel1
        #
        self._toolStripStatusLabel1.Name = "toolStripStatusLabel1"
        self._toolStripStatusLabel1.Size = System.Drawing.Size(0, 17)
        #
        # MainForm
        #
        self.ClientSize = System.Drawing.Size(284, 262)
        self.Controls.Add(self._buttonStop)
        self.Controls.Add(self._buttonStart)
        self.Controls.Add(self._statusStrip1)
        self.Name = "MainForm"
        self.Text = "Test window"
        self._statusStrip1.ResumeLayout(False)
        self._statusStrip1.PerformLayout()
        self.ResumeLayout(False)
        self.PerformLayout()

    # Startボタンを押したとき
    def ButtonStartClick(self, sender, e):
        self._toolStripProgressBar.Visible = True
        self._toolStripStatusLabel1.Text = "Now working ..."
       
    # Stopボタンを押したとき
    def ButtonStopClick(self, sender, e):
        self._toolStripProgressBar.Visible = False
        self._toolStripStatusLabel1.Text = ""

Startボタンを押すとプログレスバーが表示され、Stopボタンを押すと消える。
実行例は以下の通り。