[リストへもどる]   [VBレスキュー(花ちゃん)]
一括表示

投稿時間:2005/09/07(Wed) 10:04
投稿者名:いち
Eメール:
URL :
タイトル:
MSHFlexGridの複数行削除
こんにちわ、よろしくお願いします。
VB6.0 WinXP使用

MSHFlexGrid1とCommand1(削除ボタン)をつけ、選択した行(反転した部分)のみを削除したいと思って
いますがエラーが出ます。

@MSHFlexGrid1のクリックイベントに(HP参考にさせていただき)反転するようにしました。
With MSHFlexGrid1
    If .CellBackColor = QBColor(1) Then
        '再クリックした場合セル色を元に
        .CellBackColor = QBColor(15)
        .CellForeColor = QBColor(0)
    Else
        'セルに反転色を指定
        .CellBackColor = QBColor(1)
        .CellForeColor = QBColor(15)
    End If
end with

ACommand1クリックイベント(削除ボタン)で
Do Until MSHFlexGrid1.Row = MSHFlexGrid1.Rows
    If MSHFlexGrid1.CellBackColor = QBColor(1) Then
        '反転していれば行削除
        MSHFlexGrid1.RemoveItem i
        i = i - 1
    Else
        MSHFlexGrid1.Row = MSHFlexGrid1.Row + 1
        i = i + 1
    End If
Loop

MSHFlexGridを1行ずつループして反転していれば削除というように作りましたがエラーの状態です。
ループの処理で、カレント行が総行数になればという処理にしましたが、ここで、どうしても最終行
のところでエラーになってしまいます。エラーの原因はわかるのですが、どう作って良いのかわから
なく困っています。よろしくお願いします。
この方法以外でもありましたら、お願いします。

投稿時間:2005/09/07(Wed) 10:30
投稿者名:うるふ
Eメール:
URL :
タイトル:
Re: MSHFlexGridの複数行削除
i っていうのはなんでしょう?

投稿時間:2005/09/07(Wed) 10:46
投稿者名:いち
Eメール:
URL :
タイトル:
Re^2: MSHFlexGridの複数行削除
> i っていうのはなんでしょう?

削除する行という意味での i です。
i = i - 1
は必要無いかも…。

よろしくお願いします。

投稿時間:2005/09/07(Wed) 11:08
投稿者名:うるふ
Eメール:
URL :
タイトル:
Re^3: MSHFlexGridの複数行削除
> 削除する行という意味での i です。

メソッドから削除することは分かりますよ。
そうではなくて・・・

ループでiをまわしているわけではないのに
なぜiを削除するのか提示されたコードでは理解できません。

それともDo-LoopをくくったForでもあるんでしょうか?

投稿時間:2005/09/07(Wed) 11:09
投稿者名:kmx80
Eメール:
URL :
タイトル:
Re: MSHFlexGridの複数行削除
こんな感じでどうでしょうか。
Doループの開始が、現在の選択行になっているので削除対象の先頭からにしました。
iをカレント行の変数・ループカウンタにしてます。
以下のままだと全行削除(Rows=0)でエラーになるんでそこはチェック処理でも追加してください。

確認環境:Windows2000(SP4)、VB6.0(SP5)

〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
    i = 0                                               '@ 追加
    Do Until i = MSHFlexGrid1.Rows                      '@ 変更 / MSHFlexGrid1.Row → i
        MSHFlexGrid1.Row = i                            '@ 追加
        If MSHFlexGrid1.CellBackColor = QBColor(1) Then
            '反転していれば行削除
            MSHFlexGrid1.RemoveItem i
'            i = i - 1                                  '削除
        Else
'            MSHFlexGrid1.Row = MSHFlexGrid1.Row + 1    '削除
            i = i + 1
        End If
    Loop
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜

投稿時間:2005/09/07(Wed) 11:28
投稿者名:うるふ
Eメール:
URL :
タイトル:
Re^2: MSHFlexGridの複数行削除
あまりよいコードではありませんが、参考にしてみてね。
Private Sub Command1_Click()

   With MSHFlexGrid1
  
      .Row = 0

      Do Until .Row = .Rows
         If .CellBackColor = QBColor(1) Then
            .RemoveItem .Row
         Else
            If .Row + 1 = .Rows Then Exit Do
            .Row = .Row + 1
         End If
      Loop
  
   End With

End Sub

投稿時間:2005/09/07(Wed) 11:52
投稿者名:黒影
Eメール:
URL :
タイトル:
Re^3: MSHFlexGridの複数行削除
私はこういう場合、最終行からカウントダウンしながらやります。
そうすれば、Rowsを特に意識する事無く処理出来ます。

投稿時間:2005/09/07(Wed) 13:14
投稿者名:いち
Eメール:
URL :
タイトル:
Re^4: MSHFlexGridの複数行削除
うるふさん、kmx80さん 黒影さん ご返事ありがとうございます。

かなり、悩んでいました、DoLoop文やFor文などいろいろ作り試していました。その中で、「i」を持っ
てきたり、そのまま使ったりしていました。
皆さんのを参考にもう一度やってみます。
黒影さんの言う通り、カウントダウンするという方法も良いですね。参考になりました。

ありがとうございました。