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


グリグリアン  2009-08-15 09:44:27  No: 142410

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


グリグリアン  2009-08-15 09:46:06  No: 142411

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


GOD  2009-08-15 12:22:15  No: 142412

セル移動した時に一度、範囲選択した時に一度発生しているのでは。
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 18:33:30  No: 142413

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

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


GOD  2009-08-15 18:46:12  No: 142414

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


グリグリアン  2009-08-16 10:13:27  No: 142415

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

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

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

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


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加