• 締切済み

階層フレキシブル グリッド コントロール のスクロールバーを表示しない状態でスクロールさせる方法は?

VB6.0で階層フレキシブル グリッド コントロールを 3個をそれぞれ明細部・縦計部・横計部として使用して、 スクロールを連動させて表示したいと思っています。 ただ、グリッドコントロールのそれぞれにスクロールバー を表示させるのはあまり見栄えがよくないので、 垂直スクロールバーで、明細と横計の上下スクロール、 水平スクロールバーで、明細と縦計の左右スクロールを 制御しようと思い、 とりあえず、グリッドコントロールの ScrollBarsプロパティーをflexScrollNoneに設定してTopRowプロパティーとLeftColプロパティーの値を 適当に設定してみたのですが、左上のセルは(1,1) が表示されたままでした。 なんとか、うまくスクロールさせる方法はないでしょうか?

みんなの回答

回答No.2

スクロールバーを表示していないと、スクロールできないみたいです。(多分) (ヘルプにはキーボードでの入力時の事しか書いてありませんでした。) そこで、下記のようにしてみたらどうでしょう? 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)グリッドを表示する。 説明がなくても分かるとは思いますが念のため。 もっと、簡単な方法(設定)があったらすみません。

Silent-G
質問者

お礼

ありがとうございます。 教えて頂いた方法でやることにします。 なんとか、しのげそうです。

  • todo36
  • ベストアンサー率58% (728/1234)
回答No.1

問題なく動きますが.. Private Sub MSHFlexGrid2_Scroll() MSHFlexGrid1.LeftCol = MSHFlexGrid2.LeftCol End Sub

Silent-G
質問者

補足

すいません、うまく伝わっていないようですね。 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        >  -----------------------  よろしければ、どこを直せばよいかアドバイスお願いします。

関連するQ&A