[リストへもどる]   [VBレスキュー(花ちゃん)]
一括表示

投稿時間:2004/11/29(Mon) 10:39
投稿者名:ぽちこ
Eメール:
URL :
タイトル:
MSFlexGridの矢印キースクロール
はじめまして。
逆引きヘルプ、いつも大変お世話になっております。

早速ですが、質問させて下さい。

MSFlexGridで矢印キー(↑/↓)を押下するとアクティブセルは移動するのですが、
スクロールがついていってくれません。(行単位の選択指定)
何かプロパティの設定があるのでしょうか?

ものすごく初歩的な事かもしれないのですが、よろしくお願いします。

投稿時間:2004/11/29(Mon) 11:11
投稿者名:ダンボ
URL :
タイトル:
Re: MSFlexGridの矢印キースクロール
> 何かプロパティの設定があるのでしょうか?

私見です。
そういう仕様だ(プロパティの設定は無い)と思いますので、
自分でキーイベントを拾って、.TopIndexを+−1するしか無いのでは?

投稿時間:2004/11/29(Mon) 11:27
投稿者名:ぽちこ
Eメール:
URL :
タイトル:
Re^2: MSFlexGridの矢印キースクロール
> 私見です。
> そういう仕様だ(プロパティの設定は無い)と思いますので、
> 自分でキーイベントを拾って、.TopIndexを+−1するしか無いのでは?

早速の返信、ありがとうございます。
キーイベントですが、KeyDownもKeyPressも発生しないのです。
(イベントコードの先頭にブレーク設定しても止まらない)
キーイベントも発生しない仕様なのでしょうか?

投稿時間:2004/11/29(Mon) 14:13
投稿者名:みちぃ
Eメール:
URL :
タイトル:
Re^3: MSFlexGridの矢印キースクロール
RowColChange で、移動したセル位置を拾ってうんたらかんたら、なのでは?

投稿時間:2004/11/29(Mon) 14:33
投稿者名:ぽちこ
Eメール:
URL :
タイトル:
Re^4: MSFlexGridの矢印キースクロール
返信、ありがとうございます。

> RowColChange で、移動したセル位置を拾ってうんたらかんたら、なのでは?
RowColChangeで、移動元や移動後の位置というのは
取得出来るのでしょうか?
RowColChangeイベントには、何も引数がないです。

そもそも矢印キーとスクロールを一致させようとするのが
無理な事なのでしょうか?

投稿時間:2004/11/29(Mon) 15:44
投稿者名:みちぃ
Eメール:
URL :
タイトル:
Re^5: MSFlexGridの矢印キースクロール
MSFlexGrid だから無理がでてくるのかと思います。
Spreadとかの製品を使わないと気が利いた機能がないと思います。
なので、MSFlexGridでそれを実現しようと思ったら、ゴリゴリ書くしかない
と思いますよ。

思いついた感じでの実装はこんな感じかと。
RowColChangeでまず、セルが移動されたイベントを拾う。
MSFlexGrid.Row でRow位置が取得できます。
現在スクロールの先頭Row(TopIndex)と移動先Rowの差から、
カーソルがスクロール表示内におさまってるかどうかを判断して、
表示外なら、TopIndexを+−1
とかいう実装になると思います。
(ちょっと、今VBの環境がないので、うろ覚えですが・・・)

投稿時間:2004/11/29(Mon) 15:52
投稿者名:水無月
Eメール:
URL :
タイトル:
Re^5: MSFlexGridの矢印キースクロール
> RowColChangeで、移動元や移動後の位置というのは
> 取得出来るのでしょうか?
LeaveCell、EnterCellで移動前と後のセルの行列は取得できます。

投稿時間:2004/11/29(Mon) 16:15
投稿者名:ぽちこ
Eメール:
URL :
タイトル:
Re^6: ありがとうございました!
みちぃさん&水無月さん
お二人の返信のお陰でなんとかなりそうです。

本当にありがとうございました。
きちんと出来ましたら、結果を載せさせて頂きます。

投稿時間:2004/11/30(Tue) 16:46
投稿者名:水無月
Eメール:
URL :
タイトル:
Re: MSFlexGridの矢印キースクロール
> MSFlexGridで矢印キー(↑/↓)を押下するとアクティブセルは移動するのですが、
> スクロールがついていってくれません。(行単位の選択指定)

ちょっと再現しようとやってみました。(FlexGridはよく使うもので…)
「スクロールがついていってくれません。」というのは、矢印キーを押し続けるとアクティブセルが見えなくなるということでしょうか?
実は新規でFlexGridを追加し、プロパティページで「選択モード」を「By Row」にしてもそのようにはならないです。
私の場合きちんとScrollイベントは発生しました。
また、PageUpキーPageDownキーを押してもやはりScrollが発生し、ぽちこさまのような状態が再現できません。
ちなみにVB6でしたらSP6を入れていますか? もしSP1ならばバージョンアップしてみましょう。

投稿時間:2004/12/01(Wed) 13:53
投稿者名:ぽちこ
Eメール:
URL :
タイトル:
Re^2: MSFlexGridの矢印キースクロール
> ちょっと再現しようとやってみました。(FlexGridはよく使うもので…)
> 「スクロールがついていってくれません。」というのは、矢印キーを押し続けるとアクティブセルが見えなくなるということでしょうか?

その通りです。


> ちなみにVB6でしたらSP6を入れていますか? もしSP1ならばバージョンアップしてみましょう。

SP5です。SP6にバジョンアップしてみます。
何度もありがとうございます。

投稿時間:2004/12/01(Wed) 14:48
投稿者名:ぽちこ
Eメール:
URL :
タイトル:
Re: 解決しました・・・。
みなさんからの回答を頂いて、色々と試してみたり
ソースを見直してみたりしていました所、解決いたしました。

水無月さんの言われたように、本来はカーソルのアクティブ行と
スクロールは何もしなくても同期がとれているものでした。
なぜ、最初にした質問のような現象になっていたかと言いますと、
グリッドのSelChangeイベント内でRowを再設定していたからです。
分かってみれば、単純なミス。
皆様、お騒がせしまして申し訳ありませんでした。

ダンボさん、みちぃさん、水無月さん
色々と本当にありがとうございました&すみませんでした。

投稿時間:2004/12/01(Wed) 18:08
投稿者名:水無月
Eメール:
URL :
タイトル:
解決した後ですみません
解決した後ですみませんが…

> グリッドのSelChangeイベント内でRowを再設定していたからです。

もしコードでRowを設定するのであれば、
Private lgTop As Long
と変数を設定しておき、
Row=20などとした後(=コードで指定した後)、
lgTop=FlexGrid1.Celltop
と書くとアクティブセルを画面に表示できます。

投稿時間:2004/12/02(Thu) 10:02
投稿者名:ぽちこ
Eメール:
URL :
タイトル:
Re:フォローありがとうございます。
> lgTop=FlexGrid1.Celltop
>  と書くとアクティブセルを画面に表示できます。

おぉ!出来ました!!
変数に設定するだけで、出来るんですね!
なぜだろう?
今回は、SelChangeの処理がもともと不要だったのに
設定してあったのがミスの元でした。
しかし、SelChangeでRowを設定し直す場合は、これから
ありそうなので、しっかり覚えておきます。

勉強になりました、ありがとうございます。