- 締切済み
階層フレキシブル グリッド コントロール のスクロールバーを表示しない状態でスクロールさせる方法は?
VB6.0で階層フレキシブル グリッド コントロールを 3個をそれぞれ明細部・縦計部・横計部として使用して、 スクロールを連動させて表示したいと思っています。 ただ、グリッドコントロールのそれぞれにスクロールバー を表示させるのはあまり見栄えがよくないので、 垂直スクロールバーで、明細と横計の上下スクロール、 水平スクロールバーで、明細と縦計の左右スクロールを 制御しようと思い、 とりあえず、グリッドコントロールの ScrollBarsプロパティーをflexScrollNoneに設定してTopRowプロパティーとLeftColプロパティーの値を 適当に設定してみたのですが、左上のセルは(1,1) が表示されたままでした。 なんとか、うまくスクロールさせる方法はないでしょうか?
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- taisuke555
- ベストアンサー率55% (132/236)
スクロールバーを表示していないと、スクロールできないみたいです。(多分) (ヘルプにはキーボードでの入力時の事しか書いてありませんでした。) そこで、下記のようにしてみたらどうでしょう? Private Sub HScroll1_Change() With MSHFlexGrid1(0) .Visible = False .ScrollBars = flexScrollBarHorizontal .LeftCol = HScroll1.Value .ScrollBars = flexScrollBarNone .Visible = True End With End Sub 一部分だけですが・・・ (1)グリッドを非表示にする。(画面のちらつきが起こらないように) (2)スクロールバーを表示する。 (3)左上のセルを変更する。 (4)スクロールバーを非表示に戻す。 (5)グリッドを表示する。 説明がなくても分かるとは思いますが念のため。 もっと、簡単な方法(設定)があったらすみません。
- todo36
- ベストアンサー率58% (728/1234)
問題なく動きますが.. Private Sub MSHFlexGrid2_Scroll() MSHFlexGrid1.LeftCol = MSHFlexGrid2.LeftCol End Sub
補足
すいません、うまく伝わっていないようですね。 MSHFlexGridのScrollイベントじゃなくて、 VScrollとHScrollのChageイベントでMSHFlexGridを スクロールさせたいんですよ。 時間があったので、こんな感じっていうのを 作ってみました。 -------------------------------------------------- Private Sub Form_Load() Dim wR As Long Dim wC As Long With MSHFlexGrid1(0) .ScrollBars = flexScrollBarNone .FixedCols = 1 .FixedRows = 1 .Cols = 11 .Rows = 11 End With With MSHFlexGrid1(1) .ScrollBars = flexScrollBarNone .FixedCols = 0 .FixedRows = 1 .Cols = 1 .Rows = 11 End With With MSHFlexGrid1(2) .ScrollBars = flexScrollBarNone .FixedCols = 1 .FixedRows = 0 .Cols = 11 .Rows = 1 End With For wR = 1 To 10 MSHFlexGrid1(1).TextMatrix(wR, 0) = _ "(" & Str(wR) & "," & Str(1) & ")" For wC = 1 To 10 MSHFlexGrid1(0).TextMatrix(wR, wC) = _ "(" & Str(wR) & "," & Str(wC) & ")" Next wC Next wR For wC = 1 To 10 MSHFlexGrid1(2).TextMatrix(0, wC) = _ "(" & Str(1) & "," & Str(wC) & ")" Next wC With VScroll1 .Min = 1 .Max = MSHFlexGrid1(0).Rows - 1 .SmallChange = 1 .LargeChange = 2 End With With HScroll1 .Min = 1 .Max = MSHFlexGrid1(0).Cols - 1 .SmallChange = 1 .LargeChange = 2 End With End Sub Private Sub HScroll1_Change() MSHFlexGrid1(0).LeftCol = HScroll1.Value MSHFlexGrid1(2).LeftCol = HScroll1.Value End Sub Private Sub VScroll1_Change() MSHFlexGrid1(0).TopRow = VScroll1.Value MSHFlexGrid1(1).TopRow = VScroll1.Value End Sub -------------------------------------------------- コントロールの配置は、 MSHFlexGrid1はコントロール配列で、 MSHFlexGrid1(0)の右にMSHFlexGrid1(1)を、 さらに、MSHFlexGrid1(1)の右にVScroll1を隙間なく 配置します。 そして、MSHFlexGrid1(0)の下にMSHFlexGrid1(2)を、 MSHFlexGrid1(2)の右にHScroll1を隙間なく 配置します。 たぶん、ずれると思いますが雰囲気だけでも・・ +-----------------------+---------+△ | | |H| | | |S| | | MSHFlex |c| | MSHFlexGrid1(0) | Grid1 |r| | | (1) |o| | | |l| | | |l| | | |1| | | | | +-----------------------+---------+▽ | | | MSHFlexGrid1(2) | | | +-----------------------+ < VScroll1 > ----------------------- よろしければ、どこを直せばよいかアドバイスお願いします。
お礼
ありがとうございます。 教えて頂いた方法でやることにします。 なんとか、しのげそうです。