- ベストアンサー
MSFlexGrid
VB6SP6を用いています。MSFlexGridですが、固定行をラベルに用いています。このグリッドをクリックして処理を行っています。固定行では、クリックを無視してほしいのです。固定行をクリックしても、grid.Rowの値は0ではなく、押してもいない、1が返ってきます。本来はクリックしたくない場所ですが、処理を行う1行目をクリックしたことと同じになってしまいます。 ラベル部分をクリックしないようにと伝えていますが、やはり具合が悪いです。 良い、回避方法はないでしょうか。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
#2です。 デバッグはどうおこなっていますか?MouseRowはデバッグ中にマウスが 動くと答えが変わったりするので。 私の方ではMsFlexGridをFormに貼り付けてテストしたところ、 うまく切り抜けてるようです。 以下に貼り付けますので参考までに。 あとMouseRowについてはヘルプもみて、どんな値が返るのか理解してくださいね。 (私の環境 WindowsXP VB6SP2) Private Sub Form_Load() With MSFlexGrid1 .Rows = 10 .Cols = 10 .FixedCols = 2 .FixedRows = 2 End With End Sub Private Sub MSFlexGrid1_MouseDown(Button As Integer, Shift As Integer, x As Single, y As Single) With MSFlexGrid1 If .MouseRow < 2 Then Exit Sub 'ここでは2行を固定行にしているので、固定行の位置の時、クリック処理をせず抜けるようにしています。固定行の時はMsgboxの処理はしないようにしています。 MsgBox .MouseRow End With End Sub
その他の回答 (2)
- GatyaBu
- ベストアンサー率11% (8/70)
クリックイベント等で、 MouseCol MouseRowプロパティで判定されてはどうでしょうか? ヘルプでは、現在のマウス ポインタの位置を行と列の座標で 返します。とあるので、その値が、durian_skさんが固定行としている 行であれば、クリック処理をしないようにするとか・・・
お礼
ありがとうございます。 値を見たのですが、MouseRowがどこを押しても 14という値なのです。 クリック処理をしないようというのはどのようにするのでしょうか?
conX、conYの値は質問者で求めて下さい。 Dim mlngX As Single Dim mlngY As Single Const conX = 90 Const conY = 90 Private Sub MSHFlexGrid1_Click() MsgBox MSHFlexGrid1.Row * Abs((mlngY > conY) * (mlngX > conX)) End Sub Private Sub MSHFlexGrid1_MouseDown(Button As Integer, Shift As Integer, x As Single, y As Single) mlngX = x mlngY = y End Sub
お礼
ありがとうございました。 解決できました。