プロが教える店舗&オフィスのセキュリティ対策術

VB6.0 SPREAD3.0

SPREADで何行か表示している時に削除したい行をクリックし、その行に色(黄色)をつけ、その色のついた行を削除ボタンを押したら削除する・・・という仕様にしたいと思っております。
そして以下のように書いてみたのですが、問題があり、

(1)クリックした行の色が変わると同時に何故だか最終行の文字の色が黄色に変わってしまう。
(2)例えば一行目をクリックしてから3行目をクリックすると一行目の文字の色が黄色になってしまい、もとに戻らない。
(3)行を選択しないまま削除ボタンを押すと下から順に行が削除されてしまう。

という3つの問題があり、解決できないでいます。
なにかアドバイスがありましたらよろしくお願いします。

'---クリックした行の色を反転---
Private Sub spread_Click(ByVal Col As Long, ByVal Row As Long)

With oSpmain
.ReDraw = False
.Row = .Row: .Col = -1:
.BackColor = vbWhite
.ForeColor = RGB(255, 300, 0)
.BlockMode = True
.Row = Row: .Row2 = Row
.Col = 1: .Col2 = .MaxCols
.BackColor = .ForeColor
.ForeColor = vbWhite Xor .ForeColor
.BlockMode = False
.ReDraw = True
End With

End Sub
'---削除ボタン---
Private Sub sakujyo_Click()

With spread
.BlockMode = True
.Action = ActionDeleteRow
.BlockMode = False
.MaxRows = .MaxRows - 1
End With

End Sub

A 回答 (1件)

(1)カレント行がどこになっているか?が問題です。

クリックイベントのプロ
シージャでは、カレント行をのフォアグランドを黄色にします。一番最初に
クリックした時の.Rowの値が最終行を指しているので、最終行が黄色になり
ます。あらかじめ、先頭行を選択状態にしておき、.Rowの値に1を代入して
おく等の対処が必要です。
(2)黒に戻す処理がありません。Xorを使わなくとも、
.Row = .Row: .Col = -1 '現在反転している行を元に戻す
.BackColor = vbWhite
.ForeColor = vbBlack

.Row = Row: .Col = -1 '新しく選択した行を反転する
.BackColor = vbYellow
.ForeColor = vbBlue
では駄目ですか?
(3)カレント行(.Row)が最終行を指しているものと思います。削除のプロシ
ージャは.Rowが指すカレント行を削除します。スプレッドのクリックイベン
トが発生する前のカレント行が最終行を指しているので一番下の行が削除さ
れます。(1)の対処で直ると思います。
    • good
    • 0
この回答へのお礼

丁寧な解答ありがとうございます。
ようやくできました!
本当にありがとうございます。

お礼日時:2005/08/09 14:03

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!