DOBON.NET DOBON.NETプログラミング掲示板過去ログ

スクロールバーの制御について

環境/言語:[環境(WindowsXP)、使用言語(VB.NET)]
分類:[.NET]

初めて御投稿させていただきます。
チャート等をHScrollBar、VScrollBar(別部品)で制御したい場合、
1.チャート側の表示範囲をどのプロパティで設定すればよいのか。
2.確保したデータの領域に対し、どのようにスクロール範囲を設定すれば
 よいのか。(例えば現在日から2ヶ月分のデータ項目が20件あり、横に日付
縦に項目を設定し、実行時は15日毎、10件分ずつ参照したい)
という疑問があります。「スクロールバー」、「DOTNET」等を検索キーにして
調べたのですが、元々そのWindowsFormに存在するスクロールバーの事ばかりで、
2つのFormをあわせた時の表示方法がわかりませんでした。
 連休中申し訳ありませんが、ご指導御鞭撻のほどよろしくお願いいたします。
こんにちは、TallMenさん。ピラルクです。

普通はPanelを置いてAutoScrollをTrueにし、
その中に目的のチャート等を置けばScrollできるけど、
Scrollの移動量を項目幅に合わせてカスタマイズしたい。
Panelでは継承させてもScrollBarにアクセスできない。
だからあえて、コンテナの2段重ね的な手法とHScrollBar、
VScrollBar併用でなんとかする、という話なんでしょうか?
("2つのForm"というフレーズがちょっと?ですが)

もし、Panelに置くことをためしておられないなら、
試してみてください。

(ちょっと状況がよく分かりませんので、なんかハズしているかも)
ご返信ありがとうございました!
>Scrollの移動量を項目幅に合わせてカスタマイズしたい。
ご回答いただいたこの質問の通りです。チャートFXという製品を使って
画面を作った場合、スクロールが右側に表示されてしまう為、別な部品
を使って制御させたいということなんです。
実行イメージとしては、

-----------------------------------------------------------
- -
- 検索結果 ××件 -
- -
- ---------------------------------------------------- -
- | 11/2 11/3 ・・・・・・・・・11/17 | -
- | ----------------------------------- | -
- | ××××001 | ○ ○ ○ | || -
- | ××××002 | ○ ○ | || -
- | ××××003 | | || -
- | ××××004 | ○ ○ ○ | || -
- | ・ | | || -
- | ・ | | || -
- | ・ | | || -
- | ・ | | || -
- | ××××010 | ○ ○ ○ ○ | || -
- | |---------------------------------| || -
- | ----------------------------------- | -
- ---------------------------------------------------- -
- -
-----------------------------------------------------------

例えば横の情報2ヶ月分、縦20件分の情報があり、上からスクロール
させたいのです。まだ経験が浅く、質問の意味が解りづらいかもし
れませんが(^ ^;)
自分で表示範囲を決めて制御させたいので、引き続きご指導お願い
いたします。
■No1286に返信(TallMenさんの記事)
> ご返信ありがとうございました!
> >Scrollの移動量を項目幅に合わせてカスタマイズしたい。
> ご回答いただいたこの質問の通りです。チャートFXという製品を使って
> 画面を作った場合、スクロールが右側に表示されてしまう為、別な部品
> を使って制御させたいということなんです。
> 実行イメージとしては、
> 
> -----------------------------------------------------------
> -                                                         -
> -                                    検索結果  ××件     -
> -                                                         -
> -  ----------------------------------------------------   -
> -  |              11/2 11/3 ・・・・・・・・・11/17   |   -
> -  |              ----------------------------------- |   -
> -  | ××××001 | ○       ○                  ○ | ||   -
> -  | ××××002 | ○       ○                     | ||   -
> -  | ××××003 |                                 | ||   -
> -  | ××××004 | ○                  ○       ○ | ||   -
> -  |     ・      |                                 | ||   -
> -  |     ・      |                                 | ||   -
> -  |     ・      |                                 | ||   -
> -  |     ・      |                                 | ||   -
> -  | ××××010 | ○       ○    ○            ○ | ||   -
> -  |             |---------------------------------| ||   -
> -  |              ----------------------------------- |   -
> -  ----------------------------------------------------   -
> -                                                         -
> -----------------------------------------------------------
> 
> 例えば横の情報2ヶ月分、縦20件分の情報があり、上からスクロール
> させたいのです。まだ経験が浅く、質問の意味が解りづらいかもし
> れませんが(^ ^;)
> 自分で表示範囲を決めて制御させたいので、引き続きご指導お願い
> いたします。
> 
すみません!図が上手く表示されなかったので、もう一度送信させて
いただきます。
> 質問の意味が解りづらいかもしれませんが(^ ^;)

解りづらいです。(^^;

+--------------------------------------------------+
|□親Frame X|
+--------------------------------------------------+
| 11/2 11/3 11/4 11/5 11/6 11/7 |
| -------------------------------+--+ |
| ××××001 | ○ ○ ○ |△| |
| ××××002 | ○ ○ | | |
| ××××003 | | | |
| ××××004 | ○ ○ ○ | | |
| ××××005 | | | |
| ××××006 | | | |
| ××××007 | | | |
| ××××008 | | | |
| ××××009 | ○ ○ ○ ○ |▽| |
| |-------------------------------+--+ |
| |< >| |
| +-------------------------------+ |
+--------------------------------------------------+

ですか?
まずチャートFXという製品を知らないので(MSChart-OCXかと思った)、
この中でチャートFXにあたるのはドコでしょうか?
11/2・××××001の見出しもチャートFXで、固定されている状態?

> 画面を作った場合、スクロールが右側に表示されてしまう為、別な部品
> を使って制御させたいということなんです。

垂直スクロールバーが右側に出るのは普通だと思う。
それで何が困るのか?
別な方法は、右側にスクロールバーが出てはいけないというのか?

> 実行イメージとしては、
> 例えば横の情報2ヶ月分、縦20件分の情報があり、上からスクロール
> させたいのです。

「上から」というのは、チャートFXを載せているコンテナごと
スクロールということ?
それなら、やっぱりチャートFXを最大限大きくしてPanelに
載せればいいだけのことでは?

>Scrollの移動量を項目幅に合わせてカスタマイズしたい。

といのは、スクロールバーの△▽をクリックした時に
どれだけスクロールするかというSmallChangeプロパティ
やLargeChangeプロパティ値に関する件か?と思ったから
そう書いたのですが、2回目のレスではこの詳細については
全然ふれておられない。ちがうのでしょうか?

> 自分で表示範囲を決めて制御させたいので、

今スクロール内のどこが見えているか、というのを
プログラムから制御したいなら、やはりPanelを使って
AutoScrollPositionプロパティで可能です。

以上が、こちらの疑問点などです。


point
・"スクロール"などと略さずに、
常に"垂直スクロールバー","水平スクロールバー"
 と最大限正確に記すようにしてください。
・"まだ経験が浅く"正確な用語を用いれないなら、
 あいまいな表現を補うべく、多量の言葉と多種類の言い換え
 を用いて、説明に努めてください

すいません、もの分かり悪くて。。。
同じように(^^; 図をミスりました。

+--------------------------------------------------+
|□親Frame                                       X|
+--------------------------------------------------+
|               11/2 11/3 11/4 11/5 11/6 11/7      |
|             +-------------------------------+--+ |
| xxxxxxxx001 | oo       oo                oo |△| |
| xxxxxxxx002 | oo       oo                   |  | |
| xxxxxxxx003 |                               |  | |
| xxxxxxxx004 | oo                  oo     oo |  | |
| xxxxxxxx005 |                               |  | |
| xxxxxxxx006 |                               |  | |
| xxxxxxxx007 |                               |  | |
| xxxxxxxx008 |                               |  | |
| xxxxxxxx009 | oo       oo    oo          oo |▽| |
|             |-------------------------------+--+ |
|             |<                           >|    |
|             +-------------------------------+    |
+--------------------------------------------------+
■No1289に返信(ピラルクさんの記事)
> まずチャートFXという製品を知らないので(MSChart-OCXかと思った)、
> この中でチャートFXにあたるのはドコでしょうか?
+--------------------------------------------------+
|□親Frame                                       X|
+--------------------------------------------------+
| +-------------------------------------------+--+ | 
| |              11/2 11/3 11/4 11/5 11/6 11/7|△| |
| |-------------------------------------------+  + |
| |××××001 | ○       ○                ○|  | |
| |××××002 | ○       ○                  |  | |
| |××××003 |                              |  | |
| |××××004 | ○                  ○     ○|  | |
| |××××005 |                              |  | |
| |××××006 |                              |  | |
| |××××007 |                              |  | |
| |××××008 |                              |  | |
| |××××009 | ○       ○    ○          ○|▽| |
| +------------+------------------------------+--+ |
| |<                                       >|    |
| +-------------------------------------------+    |
+--------------------------------------------------+
垂直スクロールバー、水平スクロールバーで囲まれた部分です。

> 11/2・××××001の見出しもチャートFXで、固定されている状態?
チャートFXの範囲は見出しまでを含めた部分です。
> 
> 垂直スクロールバーが右側に出るのは普通だと思う。
> それで何が困るのか?
> 別な方法は、右側にスクロールバーが出てはいけないというのか?
間違えました。左側に表示されます。ご指摘していただいた通り、
右に出るのが普通なので、チャートFX側の垂直スクロールバーをVisible
=Falseに設定し、自分で垂直スクロールバーを付けて制御させようと
しました。

>>実行イメージとしては、
>>例えば横の情報2ヶ月分、縦20件分の情報があり、上からスクロール
>>させたいのです。
> 
> 「上から」というのは、チャートFXを載せているコンテナごと
> スクロールということ?
> それなら、やっぱりチャートFXを最大限大きくしてPanelに
> 載せればいいだけのことでは?
「上から」というのは、一番上の項目から順に項目分垂直にスクロール
させたいという意味です。

> >Scrollの移動量を項目幅に合わせてカスタマイズしたい。
> 
> といのは、スクロールバーの△▽をクリックした時に
> どれだけスクロールするかというSmallChangeプロパティ
> やLargeChangeプロパティ値に関する件か?と思ったから
> そう書いたのですが、2回目のレスではこの詳細については
> 全然ふれておられない。ちがうのでしょうか?
その通りです。OneClickで移動させられる幅を設定する方法の
事を質問したつもりになっていました(+ +;)。

>>自分で表示範囲を決めて制御させたいので、
> 
> 今スクロール内のどこが見えているか、というのを
> プログラムから制御したいなら、やはりPanelを使って
> AutoScrollPositionプロパティで可能です。
ご指摘いただいた通りにやってみます。

> point
> ・"スクロール"などと略さずに、
>   常に"垂直スクロールバー","水平スクロールバー"
>  と最大限正確に記すようにしてください。
> ・"まだ経験が浅く"正確な用語を用いれないなら、
>  あいまいな表現を補うべく、多量の言葉と多種類の言い換え
>  を用いて、説明に努めてください
> 
> すいません、もの分かり悪くて。。。
> 
わざわざご指摘ありがとうございます。文言等に細心の注意を図る
よう心がけます。
こんにちは、ピラルクです。

> 間違えました。左側に表示されます。

それは異なもの。。。


で、やはり当初のスクロール移動量ですか。

別個にHScrollBar、VScrollBarでするという件ですが、
これは可能だと思いますが、その実装は想像以上にやや
こしく、そこから得られる使用性の向上とトレードオフ
になる保守性の低下は痛いものになると予想します。

ScrollBarの実装は世に出回っている著名なSoftwareでも、
その挙動にバラツキがあります。ツマミの大きさと位置
に注目すると分かりますが、
(A)ツマミの大きさ = 表示行数 / 全行数
(B)ツマミの大きさ = 1 / スクロール状態が取り得るパターン数
(C)ツマミの大きさ = 常に小さい
と何種類かあります。(A)が正しい(多分)のですが、
このようにするには、ScrollBarを扱うのが初めてなら
おそらく苦労するでしょう。今回はそれに加え、移動量
をビュー(=チャートFX)にあわせるというオマケつき。
しかも、それにはヘッダがあるというダメ押し……。
加えて、SmallChangeとかだけでは、ツマミ自体を動かさ
れた場合には、キリのよいところで止まることは出来ない。
(通常△▽よりもこちらを使うのに!)
これに対応しようとすれば、スクロールバーのValueChanged
イベントとScrollイベント内も対処しないといけない。
イベントの連鎖などを防ぎつつ、なんとか苦労して完成
させても、いざ使ってみると違和感ありあり。。。

余計なおせっかいかも知れませんが、代替案を検討され
ることをおすすめします。例えば、
・チャートFXはPanelに載せて挙動はデフォルトのまま。
 NumericUpDown(行)とDateTimePicker(列)を新たに配置し、
 項目幅でキリよくスクロールさせたい時はそれを用いる。
とか。

ですが、どうしてもするというなら、また疑問点等あげて
いただければ(テーマを絞り込んでね!)お応えします。
(混乱させているだけかも知れませんが(^^;;;)
■No1294に返信(ピラルクさんの記事)
> 余計なおせっかいかも知れませんが、代替案を検討され
> ることをおすすめします。例えば、
> ・チャートFXはPanelに載せて挙動はデフォルトのまま。
>  NumericUpDown(行)とDateTimePicker(列)を新たに配置し、
>  項目幅でキリよくスクロールさせたい時はそれを用いる。
> とか。
>
> ですが、どうしてもするというなら、また疑問点等あげて
> いただければ(テーマを絞り込んでね!)お応えします。
> (混乱させているだけかも知れませんが(^^;;;)

Panelの実装は詳細設計の仕様変更に関係するので、確認を取って
アドバイスいただいた手法を試してみようと思います。
3連休中のお休みの中にもかかわらず、アドバイスありがとうござ
いました。m(_ _)m

DOBON.NET | プログラミング道 | プログラミング掲示板