MSFlexGridで、選択モードが「By Row」または「By column」の時に
なぜかSelChangeイベントが必ず連続で2回発生してしまいます。
(カーソルキーで1行移動した時)
選択モードが「Free」だとこのようなことがないのですが、
これはどういった理屈で2度発生しているのでしょうか。
それとも単なるバクでしょうか。
また、コード以外(プロパティの設定等)でこれを回避する(1回のみ
発生するように)方法がありましたらご教授、宜しくお願いいたします。
失礼しました。VB6使用です。
セル移動した時に一度、範囲選択した時に一度発生しているのでは。
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
GOD様、ありがとうございます!!
下記コードで確認させていただきましたが、これを見た感じでは
GOD様のご指摘の通り、仕様な感じがしますね・・・
やはりコードで制御するしかないでしょうか。
>Debug.Print "(" & MSFlexGrid1.Row & "," & MSFlexGrid1.Col & ")-(" & MSFlexGrid1.RowSel & "," & MSFlexGrid1.ColSel & ")"
ほかのイベントで代用できませんか?
例えばEnterCellとか。
GOD様、ご返答ありがとうございます!!
元はRowColChangeを使用していたのですが、コード(Row等の変更)に
よってイベントが発生してしまうため、今回SelChangeイベントを
使用することになりました。
EnterCellもそうですが、SelChangeイベント以外はコードから
イベントが発生してしまいます。
まだ検証段階ですが、GOD様の下記サンプルを参考に、
「MSFlexGrid1.ColSel=0」の時はキャンセルすることで僅かなコードのみで
かなりキレイに制御できそうです。
Debug.Print "(" & MSFlexGrid1.Row & "," & MSFlexGrid1.Col & ")-(" & MSFlexGrid1.RowSel & "," & MSFlexGrid1.ColSel & ")"
※マウスでの移動では「MSFlexGrid1.ColSel=0」は発生しないというのは
やはり不自然な仕様ですね・・・
ツイート | ![]() |