none
ステータスバーへのコメント表示について RRS feed

  • 質問

  • ユーザーインタフェースに関わる基本事項に関する質問です。


    StatusStripコントロールを使って、ステータスバーにコメントを表示しようと思っています。

    サンプルコードを参考に Form_Load 内に記述するとコメントが表示されるのですが、処理の

    途中に記述すると、これが旨く表示されません。

     

       記述例:toolStripStatusLabel1.Text = "表示するコメント";

     

    以前にも、リストボックスにセットしたアイテムが旨く表示されなくて、下記に示す →行を記述

    する事が必要と教えられ、その意味(記述の必要性)を厳密に理解しないまま、取りあえず

    記述している状況です。

               listBox1.Items.Add(" *** チェック中です ***");
        →  listBox2.Refresh();


    今回も、同じようなものが有るのではと、あちこち探してみましたが、残念ながら見つける事が

    できませんでした

     

    まずは、ステータスバーへのコメント表示について、ご教授くださいますようお願いします。

     

    併せて、ユーザーインターフェースの基本的な事柄についての知識を得るにはどの辺りを

    探ればよろしいのでしょうか。 アドバイスを頂ければ幸いです。

     

    どうぞ、よろしくお願いいたします。

    2008年12月20日 10:37

回答

  •  おおつの井上です。 さんからの引用

    サンプルコードを参考に Form_Load 内に記述するとコメントが表示されるのですが、処理の

    途中に記述すると、これが旨く表示されません。

     

       記述例:toolStripStatusLabel1.Text = "表示するコメント";

     

    一般的なこととして、表示に関わるプロパティを変更してもその行を終えた時点で更新されるわけではありません。

    処理が落ち着くまでは画面の書き換えは「予約」だけの状態で、処理が終わって空き時間ができるまでは保留されます。

     

     おおつの井上です。 さんからの引用

               listBox1.Items.Add(" *** チェック中です ***");
        →  listBox2.Refresh();

    このRefreshは「予約」ではなく、「今すぐ実行」を意味しています。

    Refreshを何度も呼ばれると不要なタイミングでも書き換えを忠実に実行するため処理が遅くなりますので、本来は呼ばないプログラミングが妥当です。(Invalidateを使うとかですが、今回の問題の解決にはなりません)

    但し、全ての要素で有効なわけではありません。

     

     おおつの井上です。 さんからの引用

    まずは、ステータスバーへのコメント表示について、ご教授くださいますようお願いします。

    toolStripStatusLabel1の親(コンテナ)は何かと考えてみて下さい。

    ステータスバー(statusStrip1)ですよね?

    StatusStripクラスにはRefreshメソッドがあるという風に、考えを巡らせてみて下さい。

     

     おおつの井上です。 さんからの引用

    併せて、ユーザーインターフェースの基本的な事柄についての知識を得るにはどの辺りを

    探ればよろしいのでしょうか。 アドバイスを頂ければ幸いです。

    系統立てて説明している書籍を探してみて下さい。

    これが分かりやすい、便利だと感じる書籍は人によって異なるので、大きな書店で何冊か見てみて下さい。

     

    重たい処理をする際はスレッド(ThreadクラスとかBackgroundWorkerとか)を使うべきですが、よく勉強してからでないと、酷いバグを生んだりしますので、難易度の高い存在かも知れません。

    これらのちょっと難しい要素に手を出す前に、まずは基礎を固めましょう。
    2008年12月20日 10:51
    モデレータ
  • こちらも読んでおかれると参考になると思います。

     

    Refresh、Update、Invalidateメソッドの違い
    http://dobon.net/vb/dotnet/control/refreshupdateinvalidate.html

    2008年12月21日 0:45
    モデレータ

すべての返信

  •  おおつの井上です。 さんからの引用

    サンプルコードを参考に Form_Load 内に記述するとコメントが表示されるのですが、処理の

    途中に記述すると、これが旨く表示されません。

     

       記述例:toolStripStatusLabel1.Text = "表示するコメント";

     

    一般的なこととして、表示に関わるプロパティを変更してもその行を終えた時点で更新されるわけではありません。

    処理が落ち着くまでは画面の書き換えは「予約」だけの状態で、処理が終わって空き時間ができるまでは保留されます。

     

     おおつの井上です。 さんからの引用

               listBox1.Items.Add(" *** チェック中です ***");
        →  listBox2.Refresh();

    このRefreshは「予約」ではなく、「今すぐ実行」を意味しています。

    Refreshを何度も呼ばれると不要なタイミングでも書き換えを忠実に実行するため処理が遅くなりますので、本来は呼ばないプログラミングが妥当です。(Invalidateを使うとかですが、今回の問題の解決にはなりません)

    但し、全ての要素で有効なわけではありません。

     

     おおつの井上です。 さんからの引用

    まずは、ステータスバーへのコメント表示について、ご教授くださいますようお願いします。

    toolStripStatusLabel1の親(コンテナ)は何かと考えてみて下さい。

    ステータスバー(statusStrip1)ですよね?

    StatusStripクラスにはRefreshメソッドがあるという風に、考えを巡らせてみて下さい。

     

     おおつの井上です。 さんからの引用

    併せて、ユーザーインターフェースの基本的な事柄についての知識を得るにはどの辺りを

    探ればよろしいのでしょうか。 アドバイスを頂ければ幸いです。

    系統立てて説明している書籍を探してみて下さい。

    これが分かりやすい、便利だと感じる書籍は人によって異なるので、大きな書店で何冊か見てみて下さい。

     

    重たい処理をする際はスレッド(ThreadクラスとかBackgroundWorkerとか)を使うべきですが、よく勉強してからでないと、酷いバグを生んだりしますので、難易度の高い存在かも知れません。

    これらのちょっと難しい要素に手を出す前に、まずは基礎を固めましょう。
    2008年12月20日 10:51
    モデレータ
  • Azulean さん、こんばんわ!

     

    早速のお答え、ありがとうございます。

     

     Azulean さんからの引用

     

    ステータスバー(statusStrip1)ですよね?

    StatusStripクラスにはRefreshメソッドがあるという風に、考えを巡らせてみて下さい。

     


    早速試してみた所、旨くいきました。

     

    いろいろ考えてみたつもりなのですが、このような流れで考える事ができませんでした。

    頂いたアドバイスは、他の場合にも応用が利くと思います。

     

    どうもありがとうございました。
     

    2008年12月20日 11:25
  • こちらも読んでおかれると参考になると思います。

     

    Refresh、Update、Invalidateメソッドの違い
    http://dobon.net/vb/dotnet/control/refreshupdateinvalidate.html

    2008年12月21日 0:45
    モデレータ
  • trapemiya さん、こんばんわ!

     

    ご親切に、資料のご案内頂きありがとうございました。

     

     trapemiya さんからの引用

    こちらも読んでおかれると参考になると思います。

     

    Refresh、Update、Invalidateメソッドの違い
    http://dobon.net/vb/dotnet/control/refreshupdateinvalidate.html

     

    それぞれの違いを体感しながら確認してみたいと思います。

     

    皆さん、引き続きよろしくお願いいたします。

     

    この件は、この辺りでクローズさせて頂きます。

    ありがとうございました。

    2008年12月21日 13:44