2

これは繰り返しの質問のように思えるかもしれませんが、特定の機能を探しています。StackOverflow と Google で同様の質問に目を通し、さまざまなコード例を使用してみましたが、今まで成功していませんか?

私がしていること:

  1. 実行時に、つまりForm1_Load、「MyFolder」内のすべてのファイルの DataGridView にファイル情報を表示する関数を呼び出します。
  2. 次へ/前へのボタンを使用して、DGV の行を循環します。

私のコード:

Private Sub Form1_Load(sender As Object, e As EventArgs) Handles Me.Load
    'Call Function To Display File Info From MyFolder:
    DataGridView1.DataSource = Fileinfo_To_DataTable("C:\Users\" + username + "\Documents\MyApp\MyFolder")
End Sub

'Next Button:
Private Sub btnNext_Click(sender As Object, e As EventArgs) Handles btnNext.Click

    If DataGridView1.SelectedRows(0).Index < DataGridView1.RowCount - 1 Then
        MyDesiredIndex = DataGridView1.SelectedRows(0).Index + 1
    Else
        MyDesiredIndex = 0
    End If

    DataGridView1.ClearSelection()
    DataGridView1.CurrentCell = DataGridView1.Rows(MyDesiredIndex).Cells(0)
    DataGridView1.Rows(MyDesiredIndex).Selected = True
End Sub

'Previous Button:  
Private Sub btnPrev_Click(sender As Object, e As EventArgs) Handles btnPrev.Click
    If DataGridView1.CurrentCell.RowIndex >= 0 And DataGridView1.CurrentCell.RowIndex <= DataGridView1.Rows.Count - 1 Then
        For Each row As DataGridViewRow In DataGridView1.Rows
            If Not row.IsNewRow Or vbNull Then
                MyDesiredIndex = DataGridView1.SelectedRows(0).Index - 1
            End If
        Next
    End If

    DataGridView1.ClearSelection()
    DataGridView1.CurrentCell = DataGridView1.Rows(MyDesiredIndex).Cells(0)
    DataGridView1.Rows(MyDesiredIndex).Selected = True
End Sub

問題:
[次へ] ボタンが、例外なくすべての DGV 行を「連続ループ」で循環します。「連続ループ」とは、プログラムが最初の行 (0) または最後の行で停止することなくすべての行を循環することを意味します (つまり、[次へ] ボタンを押し続ける限り循環が発生します)。

[へ] ボタンは、最初に [次へ] ボタンを使用して選択した行を変更した場合にのみ機能します (つまり、[最初] > [最後])。次に、Previous ボタンを押すと、選択した行が最初の行に戻ります (つまり、Last > First)。ただし、プログラムが最初の行に到達すると、次のように例外がスローされます。

「System.ArgumentOutOfRangeException: 'インデックスが範囲外でした。負ではなく、コレクションのサイズ未満である必要があります。パラメータ名: インデックス'」

  1. 範囲外の例外を解決します。
  2. すべての行の問題を循環/ループする問題を解決しますか?

私が試したこと:
上記の(および他の多くの)試みに加えて、StackOverflowで次のコードを見つけました。これは同じ問題に対処しますが、すべての行を循環せずに最初の行で停止します:

データグリッドビューで前の行に移動データグリッドビューで前の行に
移動

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    Dim i As Integer = DataGridView1.CurrentRow.Index - 1
    If i < 0 Then i = 0
    DataGridView1.CurrentCell = Me.DataGridView1.Rows(i).Cells(0)
    DataGridView1.Rows(i).Selected = True
End Sub

望ましい動作:
[前へ] ボタンを [次へ] ボタンと同じように動作させる、つまり、例外をスローせずにすべての行を連続的に循環させるための助けをいただければ幸いです。

範囲内の前の行の選択を「含む」ロジックを見つけようと何度も試みましたが、成功しませんでした。しかし、[次へ] ボタンが停止せずに行を連続的に循環する方法が本当に気に入っています。この動作を [前へ] ボタンにコピーして、停止せずに両方の方法 (つまり、次/前) を連続的に循環できるようにしたいと考えています。また、いくつかの異なるループを試しFor Eachましたが、コードを目的の方法で動作させることができませんでしたか?

どうすればこれを達成できるか考えている人はいますか?

4

1 に答える 1