Windowsフォームのアプリケーションで「ステータスバー」が表示されていると何かと便利です。
C#のプログラムではステータスバーはStatusStripクラス(System.Windows.Forms名前空間)で作ります。
ステータスバーをフォームデザイナに置いて、実行するだけでは、「ウィンドウの下に何かある」くらいのものになりますのでステータスバーに表示するものを用意します。
ステータスバーに文字列を表示する
ステータスバー(StatusStrip)にまず、文字列を表示してみます。
StatusStripは、直接文字列などを設定するという方法ではなく、「文字列を表示するコントロールをStatusStripに乗せる」という方法になります。
ステータスバーに文字列を表示するにはToolStripStatusLabelクラスを使用します。
サンプルは下記のようになります。
(statusStrip1はステータスバーであるStatusStripクラスのオブジェクト名です)
private void frmMain_Load(object sender, EventArgs e) { // フォームを表示するときの処理 this.statusStrip1.Items.Add(new ToolStripStatusLabel("ステータスバーの文字列")); }
これだけでステータスバーに文字列が表示できます。
ステータスバーに現在時刻を表示する
ステータスバーに固定文字列が表示できるだけだとあまり実感がないので、現在時刻を表示してみます。
現在時刻を表示したりするためには、タイマイベントによる定期チェックと表示更新が必要になります。
ただ、C#(.NET Framework)でタイマイベントでフォームの描画更新を行うのはちょっとお作法がありますが、今回の本題からはそれますのでそちらは割愛させていただきます。
サンプルは下記のようになります。
/// <summary> /// 現在日時を表示するためのToolStripStatusLabel /// </summary> private ToolStripStatusLabel _toolStripStatusDateTime; /// <summary> /// コンストラクタ /// </summary> public frmMain() { InitializeComponent(); } /// <summary> /// フォームをロードするときの処理 /// </summary> /// <param name="sender">送信元オブジェクト</param> /// <param name="e">イベントオブジェクト</param> private void frmMain_Load(object sender, EventArgs e) { // フォームを表示するときの処理 _toolStripStatusDateTime = new ToolStripStatusLabel(); this.statusStrip1.Items.Add(_toolStripStatusDateTime); timer1.Interval = 300; timer1.Enabled = true; } /// <summary> /// タイマイベント処理 /// </summary> /// <param name="sender">送信元オブジェクト</param> /// <param name="e">イベントオブジェクト</param> private void timer1_Tick(object sender, EventArgs e) { // timer1.Enabled = false; this.UpdateStatusBar(); timer1.Enabled = true; } /// <summary> /// タイマによるステータスバー描画更新のためのデリゲート /// </summary> private delegate void UpdateStatusBarDelegate(); /// <summary> /// ステータスバー描画更新の処理 /// </summary> private void UpdateStatusBar() { if (this.InvokeRequired) { this.Invoke(new UpdateStatusBarDelegate(this.UpdateStatusBar)); return; } // // ここでステータスバーの更新を行います // // 現在日時をステータスバーに表示します _toolStripStatusDateTime.Text = DateTime.Now.ToString("yyyy/MM/dd hh:mm:ss"); }
実際にステータスバーに表示するために必要な処理は、色をつけた行だけなのですが、一定間隔で安全に描画更新を行うためにはこういった処理が必要になります。