MSFlexGridのSelChangeイベントが2回発生する件について


グリグリアン  2009-08-15 00:44:27  No: 142410  IP: 192.*.*.*

MSFlexGridで、選択モードが「By Row」または「By column」の時に
なぜかSelChangeイベントが必ず連続で2回発生してしまいます。
(カーソルキーで1行移動した時)
選択モードが「Free」だとこのようなことがないのですが、
これはどういった理屈で2度発生しているのでしょうか。
それとも単なるバクでしょうか。
また、コード以外(プロパティの設定等)でこれを回避する(1回のみ
発生するように)方法がありましたらご教授、宜しくお願いいたします。

編集 削除
グリグリアン  2009-08-15 00:46:06  No: 142411  IP: 192.*.*.*

失礼しました。VB6使用です。

編集 削除
GOD  2009-08-15 03:22:15  No: 142412  IP: 192.*.*.*

セル移動した時に一度、範囲選択した時に一度発生しているのでは。
ByColumn, ByRow はそういう仕様じゃないのかな?

Option Explicit

Private Sub Form_Load()
    With MSFlexGrid1
        .Rows = 10
        .Cols = 10
        '.SelectionMode = flexSelectionByColumn
        .SelectionMode = flexSelectionByRow
    End With
End Sub

Private Sub MSFlexGrid1_SelChange()
    Debug.Print "(" & MSFlexGrid1.Row & "," & MSFlexGrid1.Col & ")-(" & MSFlexGrid1.RowSel & "," & MSFlexGrid1.ColSel & ")"
End Sub

編集 削除
グリグリアン  2009-08-15 09:33:30  No: 142413  IP: 192.*.*.*

GOD様、ありがとうございます!!
下記コードで確認させていただきましたが、これを見た感じでは
GOD様のご指摘の通り、仕様な感じがしますね・・・
やはりコードで制御するしかないでしょうか。

>Debug.Print "(" & MSFlexGrid1.Row & "," & MSFlexGrid1.Col & ")-(" & MSFlexGrid1.RowSel & "," & MSFlexGrid1.ColSel & ")"

編集 削除
GOD  2009-08-15 09:46:12  No: 142414  IP: 192.*.*.*

ほかのイベントで代用できませんか?
例えばEnterCellとか。

編集 削除
グリグリアン  2009-08-16 01:13:27  No: 142415  IP: 192.*.*.*

GOD様、ご返答ありがとうございます!!
元はRowColChangeを使用していたのですが、コード(Row等の変更)に
よってイベントが発生してしまうため、今回SelChangeイベントを
使用することになりました。
EnterCellもそうですが、SelChangeイベント以外はコードから
イベントが発生してしまいます。

まだ検証段階ですが、GOD様の下記サンプルを参考に、
「MSFlexGrid1.ColSel=0」の時はキャンセルすることで僅かなコードのみで
かなりキレイに制御できそうです。

Debug.Print "(" & MSFlexGrid1.Row & "," & MSFlexGrid1.Col & ")-(" & MSFlexGrid1.RowSel & "," & MSFlexGrid1.ColSel & ")"

※マウスでの移動では「MSFlexGrid1.ColSel=0」は発生しないというのは
やはり不自然な仕様ですね・・・

編集 削除