ひとりも見捨てないことを、あきらめない

学校教育、社会教育、数学、技術家庭科、Youtube、EdTech、ICT、プログラミング、その他

こんな仕組みだったんですねえ(スクロール)01/03 金

作業するために、大きく表示させたい

 年末・年始の間も、時間をつくってプログラミングを継続しています。次第にアプリケーションの形になりつつあります(こういう時期は、だんだんに出来上がっていくので、とても楽しいです)。

 下の図は、「だいたいこんな感じのアプリケーションにしたい」という概念的なものを表しています。

f:id:takase_hiroyuki:20200104154811p:plain

 これは、どういうことかというと、メニューの代わりに「タブ」があって、主たる作業はこのタブで行いながら、別のタブで設定等を随時おこなえるようにしようというものです。

 一番上にタブがあり、上下の真ん中のところで作業を行い、一番下には、現在の状態を表すような場所があります。この状態で、真ん中の作業用の場所では、全体がおさまり切らないので、上下にスクロールできるようにしたいと考えています。そこで、あちこちのホームページを参考にして、スクロール・バーを表示させるようにしました。具体的には、

    AutoScroll = true;

というものを一行、追加するだけです。これだけで「はみだす場合には、スクロール・バーを表示させ、上下にスクロールできるようにする」ということが実現します。もちろん、はみ出さない場合には、スクロールバーは表示されません。とても便利な仕組みなので、さっそくこれを使うことにしました。具体的には、この画面全体は Form という部品でできているので、その Form に設定してみました。

 ところが、うまくいきません。

 うまくいかないというのは、「上のメニューも、下の情報を書くところも、全部、一度にスクロールしてしまう」という状態になってしまいました。「スクロールさせようとしたら、一番上のメニューが、消えてなくなってしまった」、ということでは作業が続けられません。

 じゃあ、どうすればいいのか、というと、このくらい細かい話になると、あちこちのページを見ても、どこにも書いてないのです。書いてありませんが、「真ん中の部分だけがスクロールする」というのは、ごく一般的なアプリケーションであれば、ちゃんとそういうふうになっていますから、できないワケはありません。

 そこで、あれこれ実験してみた結果、おそらく次のような方法を、皆さんは採用しているのではないかということが分かりました。

  1. まず、上にタブ(メニュー)を配置し、下に情報を表示する場所を配置する(ここまでは同じ)
  2. まんなかに、panel (パネル)というものを配置する。パネルには、スクロールバーを設置することができます。パネルにスクロールバーが表示されるのは、パネルの中に「パネルよりも大きなものが配置されたとき」です。
  3. そこで、真ん中に、実際に作業したいスペースを、パネルよりも大きなサイズで配置する。「大きなサイズで配置する」目的は、小さすぎると、細かくて見えないからです。ある程度、拡大できるようにしないと、細かいところがきちんと作業できません。

このようにして、上と下を固定した状態で、真ん中だけをスクロールするということが可能になりました。

でも、まだ細かい設定が必要です

 上のような方法で終わりなら良いのですが、実際には、細かい設定作業が残っています。というのは、全体の場面のなかに、いくつかの部品を配置していくのですが、

  1. 画面の上部のタブ(メニュー)の幅と高さ
  2. 真ん中で作業するパネルの幅と高さ
  3. 下の情報を示す場所の幅と高さ
  4. 真ん中のパネルの中に配置する作業場所の幅と高さ

というものは、すべてプログラムで自分で数値を計算して、あてはめて行かなければなりません。

 もともと、スクロールさせようという目的は、アプリケーション全体を大きく表示させたり、ある程度小さく表示させても、中の部品たちが、それなりに拡大・縮小して表示させるようにしたいからです。

 こういうのを、全部、プログラムで計算して、表示させているんだなあと、自分でアプリケーションをつくりながら、つくづく感心している次第です。みなさん、頑張って作っているんですね。

 ひとつひとつの課題は、解決しつつありますが、全体が完成するまでには、まだ時間がかかります。のんびり作っていこうと考えています。

f:id:takase_hiroyuki:20191123160855p:plain