C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[3]: DataGridViewのReadOnlyセルのスキップ


(過去ログ 93 を表示中)

[トピック内 4 記事 (1 - 4 表示)]  << 0 >>

■55683 / inTopicNo.1)  DataGridViewのReadOnlyセルのスキップ
  
□投稿者/ bagabond (4回)-(2010/12/09(Thu) 14:05:20)

分類:[VB.NET/VB2005 以降] 

DataGridViewのReadOnlyセルをスキップする方法についてネットで調べると、DataGridViewのOnKeyDownメソッドを上書きする方法がありました。プログラムを作成して、テストすると、セルに未入力でEnterキー(Tabキー)を押している状態では、予定通りの動作をしますが、セルの内容を書き換えてEnterキーを押してもOnKeyDownメソッドがコールされなくて、ReadOnlyセルに移動してしまいます。

解決方法がありましたら、教えてください。

Protected Overrides Sub OnKeyDown(Byval e As KeyEventArgs)
If e.KeyCode = Keys.Enter Then
  ' Enterキーの場合のみ
  ’ReadOnly = Falseのセルを探す   
  Me.CurrentCell = Me.Rows().Cells() <- 次のセルに移動する 

End If
End Sub

環境:VB2008
引用返信 編集キー/
■55690 / inTopicNo.2)  Re[1]: DataGridViewのReadOnlyセルのスキップ
□投稿者/ マサヤ (185回)-(2010/12/09(Thu) 15:02:48)
DataGridViewに[1]編集可能セル、ReadOnlyセル、[2]編集可能セルという形でRowが構成されています。
ReadOnlyセルにはフォーカスを当てたくないので、フォーカスが当たった場合は、次の[2]編集可能セルに自動でフォーカスを移動したいと考えています。
要件はこれであっていますか?
引用返信 編集キー/
■55699 / inTopicNo.3)  Re[2]: DataGridViewのReadOnlyセルのスキップ
□投稿者/ bagabond (5回)-(2010/12/09(Thu) 16:58:38)
No55690 (マサヤ さん) に返信
> DataGridViewに[1]編集可能セル、ReadOnlyセル、[2]編集可能セルという形でRowが構成されています。
> ReadOnlyセルにはフォーカスを当てたくないので、フォーカスが当たった場合は、次の[2]編集可能セルに自動でフォーカスを移動したいと考えています。
> 要件はこれであっていますか?

あっています。
例えば、ひとつの行(Row)に3列(Column)あって、先頭の列が編集可能列(セル)、2番目がReadOnly列(セル)、3番目が編集可能列(セル)となっている場合、先頭セルに入力して、Tabキーを押すと2列目のセルをスキップして3列目のセルに移動すると言う要件です。

引用返信 編集キー/
■55722 / inTopicNo.4)  Re[3]: DataGridViewのReadOnlyセルのスキップ
□投稿者/ bagabond (6回)-(2010/12/10(Fri) 15:48:08)
No55699 (bagabond さん) に返信
DataGridViewのReadOnlyセルをスキップする方法。解決しました。

CellEnterイベントプロシージャで、SendKeys.Send("{Tab}")メソッドを実行するやり方では、タイムラグがあるのか動作が安定していなかったので質問したのですが、ネットにあった参考例の通りプログラムしたら、問題なく動作しました。

Private Sub DataGridView_CellEnter(ByVal sender AS Object, ByVal e AS ・・・・
Dim oDGV as DataGridView = DirectCast(sender, DataGridView)
Dim oDGCell As DataGridViewCell = DirectCast(oDGV.Item(e.ColumnIndex, e.RowIndex), DataGridViewCell)

If oDGCell IsNot Nothing AndAlso oDGVCell.ReadOnly Then
SendKeys.Send("{Tab}") <- Backの場合は"+{Tab}"
End If

End Sub

理由はわかりませんが、DataGridViewCellの参照でDirectCastを指定しない場合や以下のような参照の仕方では、動作が安定しないようです。(私の環境で)
Dim oDGCell As DataGridViewCell = oDGV.Rows(e.RowIndex).Cells(e.ColumnIndex)


解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -