DOBON.NET DOBON.NETプログラミング掲示板過去ログ

DataGridViewのセル編集モード

環境/言語:[VB2005 WinXPSP2]
分類:[.NET]

よろしくお願いします。
DataGridViewでセルの編集時(テキスト)にセルの編集モードをコード上で
終わらせるよい方法はないでしょうか?
現在は別のコントロールにフォーカスを移して終わらせる方法しか分かりません。
内容は実現できてもこの方法ではすっきりしません。
たとえばENTERキーを押したようなイベントを発生させるとか・・・
それとセル編集モードを終えた後CellEndEditメソッドが発生させないといけません。どなたかご教授お願いします。
お久しぶりです、引っ込んだ(略)と申します。
 お答えいたします。
 
 「別のコントロールにフォーカスを移して終わらせる方法」以外の方法として、
 例えば以下の方法が考えられます。

 ご存知かもしれませんが、ご質問の内容とかなり関連の深い資料を
 いくつか見つけることができましたので、参考にされてみてください。
    ↓trapemiya さんのコードが大変参考になります。
   http://dobon.net/cgi-bin/vbbbs/cbbs.cgi?mode=al2&namber=21426&rev=&no=0
    ↓魔界の仮面弁士 さんのコードが大変参考になります。
   http://bbs.wankuma.com/index.cgi?mode=al2&namber=14365
    ↓どぼん!さんの .NET Tips 内にも見つけることができました。
   http://dobon.net/vb/dotnet/datagridview/textboxevent.html 
    ↓拙稿ですが参考になれば幸いです。
   http://bbs.wankuma.com/index.cgi?mode=al2&namber=13846
 
Public Class Form4_4
    Inherits Form

    Dim WithEvents m_dgv As New DataGridView()
    Dim WithEvents m_editingcontrol As Control

    Private Sub Form4_4_Load(ByVal sender As Object, ByVal e As EventArgs) Handles Me.Load
        m_dgv.Dock = DockStyle.Fill
        m_dgv.RowCount = 10
        m_dgv.ColumnCount = 3
        Me.Controls.Add(m_dgv)
    End Sub

    Private Sub m_dgv1_CellEndEdit(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles m_dgv.CellEndEdit
        Me.m_editingcontrol = Nothing ' ← ここでイベントハンドラも削除されます
        Console.WriteLine("CellEndEdit")
    End Sub

    Private Sub m_dgv_EditingControlShowing(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewEditingControlShowingEventArgs) Handles m_dgv.EditingControlShowing
        Console.WriteLine("EditingControlShowing")
        Me.m_editingcontrol = e.Control ' ← ここでイベントハンドラも登録されます
    End Sub

    Private Sub m_editingcontrol_PreviewKeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.PreviewKeyDownEventArgs) Handles m_editingcontrol.PreviewKeyDown
        If e.KeyCode = Keys.Return Then
            Me.m_dgv.EndEdit()
        End If
    End Sub
End Class

# 多分これでいけるとは思いますが、もし上手くいかなかった場合には
# 遠慮なくフィードバックをいただければと思います。

以上です。
返事が遅くなって申し訳ありません。
引っ込んだ(略)さんいつもありがとうございます。

引っ込んだ(略)さんのコードを実装して思っていた動作ができました。
VB6出身なのでイベントハンドラを扱うことに慣れていないもので・・・
もっとがんばりたいと思います。

解決です!本当にありがとうございました。
解決済み!

DOBON.NET | プログラミング道 | プログラミング掲示板