掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
DataGridViewのProcessDataGridViewKeyイベントで次のコントロールに飛ばすには (ID:139781)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
環境はVisualBasic2005 WindowsXPです。 DataGridViewでEnterキーを押したときにTabと同じ動きにするソースを 書いています。 ReadOnlyのセルを飛ばす処理を入れました。 参考にしたサイトのソースだと一番下のセルまで行くと次のコントロールに 移るのですが、 自分の書いたソースだと一番下のセルで止まってしまいます。 どういった方法で修正すればいいのかヒントや参考HPでいいので よろしくお願いします。 参考HP どぼん.NET http://dobon.net/vb/dotnet/datagridview/enterkeymoveright.html Protected Overrides Function ProcessDialogKey( _ ByVal keyData As Keys) As Boolean ' 'Enterキーが押された時は、Tabキーが押されたようにする Dim MaxCellCount As Long = (Me.Rows.Count - 1) * Me.Columns.Count Dim BreakCellCount As Long = 0 Dim ColInt As Integer = Me.CurrentCell.ColumnIndex + 1 Dim RowInt As Integer = Me.CurrentCell.RowIndex While (BreakCellCount <= MaxCellCount) For i As Integer = ColInt To Me.Columns.Count - 1 If Me.Rows(RowInt).Cells(i).ReadOnly = False Then Me.CurrentCell = Me.Rows(RowInt).Cells(i) 'Return MyBase.ProcessDialogKey(keyData) End If BreakCellCount += 1 Next 'チェックするセルを一番左の列に戻す ColInt = 0 If RowInt < Me.Rows.Count - 1 Then '改行 RowInt += 1 Else Exit While End If End While If Me.CurrentCell.RowIndex = Me.Rows.Count - 1 _ And Me.CurrentCell.ColumnIndex = Me.Columns.Count - 1 Then Return Me.ProcessTabKey(keyData) End If End Function Protected Overrides Function ProcessDataGridViewKey( _ ByVal e As KeyEventArgs) As Boolean If e.KeyCode <> Keys.Enter And e.KeyCode <> Keys.Tab Then Exit Function End If Dim MaxCellCount As Long = (Me.Rows.Count - 1) * Me.Columns.Count Dim BreakCellCount As Long = 0 Dim ColInt As Integer = Me.CurrentCell.ColumnIndex + 1 Dim RowInt As Integer = Me.CurrentCell.RowIndex While (BreakCellCount <= MaxCellCount) For i As Integer = ColInt To Me.Columns.Count - 1 If Me.Rows(RowInt).Cells(i).ReadOnly = False Then Me.CurrentCell = Me.Rows(RowInt).Cells(i) e.Handled = True Return True 'Return MyBase.ProcessDataGridViewKey(e) End If BreakCellCount += 1 Next 'チェックするセルを一番左の列に戻す ColInt = 0 If RowInt < Me.Rows.Count - 1 Then '改行 RowInt += 1 Else Exit While End If End While If Me.CurrentCell.RowIndex = Me.Rows.Count - 1 _ And Me.CurrentCell.ColumnIndex = Me.Columns.Count - 1 Then e.Handled = True Return Me.ProcessTabKey(Keys.Tab) End If End Function
←解決時は質問者本人がここをチェックしてください。
更新する
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.