- - PR -
DATAGRIDVIEWでカレントセルを移動時にエラーが表示されます
1
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 2008-04-06 18:20
度々申し訳ありませんが教えてください。
環境 VB2005 内容 DATAGRIDVIEWでカレントセルを移動時にエラーが表示されます 「SetCurrentCellAddressCore 関数への再入呼び出しを生じるため、この操作は有効ではありません。」 コード Private Sub datagriduser_CellValueChanged(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles datagriduser.CellValueChanged Try ro = Me.datagriduser.CurrentCell.RowIndex cu = Me.datagriduser.CurrentCell.ColumnIndex code = CStr(datagriduser(cu, ro).Value) Catch End Try End Sub Private Sub datagriduser_CurrentCellChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles datagriduser.CurrentCellChanged cu = Me.datagriduser.CurrentCell.ColumnIndex Select Case cu Case 0 Me.datagriduser.CurrentCell = Me.datagriduser(3, 0) Case 1 Me.datagriduser.CurrentCell = Me.datagriduser(5, 1) End Select End Sub 動作 datagriduserはENTERキーで右の列にカーソル移動します。 @DATAGRIDBIEW左端のセルで文字を入力後ENTER A現在のカレントセルの列を取得後カレントセルの移動 Aでエラーが表示されます。 お手数をお掛けしますが、宜しくお願いします。 |
|
投稿日時: 2008-04-06 20:35
DataGridViewではEnterイベント(というかフォーカス制御系イベント)発生の
流れにおいて「再度同様のイベントを発生させるような行為」は 例外が発生するようになっています。 今回ですと、CurrentCellChangedイベントの中でカレントセルを 更に移動させようとしているために発生していると思います。 |
|
投稿日時: 2008-04-06 23:09
返答ありがとうございます。
他のイベントに設定する等、何か良い方法はございませんでしょうか? |
|
投稿日時: 2008-04-07 10:56
「Enterで右へ移動」という制御と「値によって移動するセルを変更」という制御が
バッティングしてしまっていることが根幹だと思いますので、 そのあたりを含めた見直しを行ったほうがいいかと思います。 「Enterで右へ移動」という制御をどこに書いてあるかによって、 対応は分かれると思いますね。 |
|
投稿日時: 2008-04-09 23:31
ご回答ありがとうございます。
ご指摘のとおり色々調べた結果、派生GRIDを作成後processcmdkeyをオーバーライドしENTERキーを補足し無効までは理解できたのですが、GRIDクラス内での カレントセル移動の記述がわかりません。 GRIDクラス内でカレントセルの取得、移動制御は可能なのでしょうか? コード Protected Overrides Function ProcessCmdKey _ (ByRef msg As System.Windows.Forms.Message, _ ByVal keyData As System.Windows.Forms.Keys) As Boolean If msg.Msg = WM_KEYDOWN Then If (keyData = Keys.Enter) Then Return True ’ここに記述が必要かと思うのですが。 Else Return MyBase.ProcessCmdKey(msg, keyData) End If End If Return MyBase.ProcessCmdKey(msg, keyData) End Function 色々お手数をお掛けしまして申し訳ありませんが宜しくお願いします。 |
1