一方的にメッセージを表示するダイアログ
ある程度時間のかかる処理を行っている間、メッセージダイアログを表示したい。「今、印刷中です」のようなもの。
MessageBoxを使うと、メッセージ画面にボタンが一緒に表示されてしまう。「OK」「キャンセル」「Yes」「No」等。表示するダイアログは処理の間はずっと表示させておいて、処理が終わったら自動的に閉じるようにしたいので、ユーザーとの双方向コミュニケーションは不要だ。であるのでボタンが表示されるMessageBoxは使えない。
代わりに、ふつうのFormを使うしかないのではないかという結論に達する。Formで何も考えずにメッセージ表示画面を作ると、例えば下図のようなものになる。
これではまだ不要なボタンがあるので、Appearanceをいじってそれっぽい見た目のFormに変える。
表示中はカーソルをぐるぐる回すようにもしてみた。実際の実行画面を以下に示す。
ソースコードは以下の通り。
まず、表示されるメッセージダイアログの方。
import System.Drawing import System.Windows.Forms from System.Drawing import * from System.Windows.Forms import * class Message(Form): def __init__(self): self.InitializeComponent() def InitializeComponent(self): self._label1 = System.Windows.Forms.Label() self.SuspendLayout() # # label1 # self._label1.Font = System.Drawing.Font("メイリオ", 12, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, 128) self._label1.Location = System.Drawing.Point(35, 34) self._label1.Name = "label1" self._label1.Size = System.Drawing.Size(238, 23) self._label1.TabIndex = 0 self._label1.Text = "Now running processes..." self._label1.UseWaitCursor = True # # Message # self.BackColor = System.Drawing.SystemColors.ButtonFace self.ClientSize = System.Drawing.Size(301, 97) self.Controls.Add(self._label1) self.ForeColor = System.Drawing.SystemColors.ActiveCaptionText self.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedToolWindow self.Name = "Message" self.UseWaitCursor = True self.ResumeLayout(False)
メッセージダイアログを起動する方は、下のようにする。ボタンを押したとき処理が始まるようになっている。win.Show()の代わりにwin.ShowDialog()とするとモーダルで実行されるので、以後の処理がいつまでも実行されないので注意する。
略 def Button1Click(self, sender, e): win = Message.Message() win.Show() #(何か処理を実行する) win.Dispose()