• ベストアンサー

DataGridView入力確定前の値を取得

VB.net (VS2005)のDataGridViewに関してですが、 セルの入力が確定される前の値を取得したいのですが いい方法はないでしょうか。 入力可能状態のセルに文字を張付けたとき、 RowStateChangedイベントが発生するのですが、 Enterキーを押下して入力を確定する前に、 張付けた文字列を取得したいです。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

こんにちは。 DataGridViewのCellに文字列をコピーペーストした際に、コピペした文字列 をEnterキーで入力確定するまえに取得するサンプルを作ってみました。 動作イメージは コピペによるセルの編集を検知(CurrentCellDirtyStateChanged) ↓ セルの編集を一度コミット(CurrentCellDirtyStateChanged) ↓ コミット後に発生するイベントでコピペした値を取得(CellValueChanged) 'サンプル) Private Sub DataGridView1_CurrentCellDirtyStateChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles DataGridView1.CurrentCellDirtyStateChanged If Me.DataGridView1 Is Nothing Then Exit Sub End If DataGridView1.CommitEdit(DataGridViewDataErrorContexts.Commit) End Sub Private Sub DataGridView1_CellValueChanged(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles DataGridView1.CellValueChanged If Me.DataGridView1 Is Nothing OrElse Me.DataGridView1.CurrentCell Is Nothing Then Exit Sub End If     ’コピペした文字列を表示 MsgBox(Me.DataGridView1.CurrentCell.Value) End Sub

futatake
質問者

お礼

返答遅くなりまして申し訳ありません。 教えて頂いた方法でうまく要件を満たすことができました。 ありがとうございました。

関連するQ&A

  • DatagridViewの値確定

    VB2005です。 DataGridViewを私用しています。 EditModeはEditOnEnterです。 特定のセルの値を変更し、カーソルがその列から移動していない状態で、 Buttonコントロールをクリックすると、ボタンクリック時のイベントの前に、 そのセルのCellValueChangedイベントが発生します。 が、同じ要にセルの値を変更し、カーソルがその列から移動していない状態で、 HScrollBarコントロールをクリックすと、CellValueChangedイベントが発生しません。 そうすると、変更した値が反映されず、前の値で処理が進んでしまいます。 HScrollBarコントロールをクリックしたときも、DataGridViewの値が 確定される方法はないでしょうか。 よろしくお願いいたします。

  • DataGridViewでコードで値を入力したい

    VB2005のDataGridViewですが、行と列を指定して そのセルに値を入力したいと思いますが、どのプロ パティに行番号・列番号を入れればいいのでしょうか?

  • DataGridViewで、選択した行の値を取得したい。

    VB2005環境です。 VB2005で、選択した行の、特定の列から値を取って、 テキストボックスに出力したいと思っています。 Itemプロパティかと思い、 TxtBox1.Text = Me.DataGridView1.Item _(0,Me.DataGridView1.CurrentRow.Index).ToString と記述してみました。1列目の、選択した行と交わるセルの 値が取れるかと思いきや、うまく取得できません。 方法を教えていただけないでしょうか? よろしくお願いします。

  • DataGridViewで指定したセルの値を取得

    こんにちは。 VB2008のDataGridViewで指定したセルの値を取得をする方法がわかりません。 どなたか教えてください。

  • DataGridViewから値取得

    DataGridViewにボタンと項目2つが配置されています。 DataGridView1 DataGridView1.Columns("btn").HeaderText = "ボタン" DataGridView1.Columns("item1").HeaderText = "アイテム1" DataGridView1.Columns("item2").HeaderText = "アイテム2" ボタンを押すと、押した行のレコードを取得したいです。 ボタンのところを押下すると、 イベントハンドラで何行目か分かるサンプルをネットで見つけました。 惜しいですが、やりたいのと少し違いました。 'CellContentClickイベントハンドラ Private Sub DataGridView1_CellContentClick(ByVal sender As Object, ByVal e As DataGridViewCellEventArgs) Handles DataGridView1.CellContentClick Dim dgv As DataGridView = CType(sender, DataGridView) Dim test_item1 As String Dim test_item2 As String ' "btn"列ならば、ボタンがクリックされた If dgv.Columns(e.ColumnIndex).Name = "btn" Then MessageBox.Show((e.RowIndex.ToString() + "行のボタンがクリックされました。")) End If ' ここに押された行のitem1の値をセット ' test_item1 = (A) ' ここに押された行のitem2の値をセット ' test_item2 = (B) End Sub (A)、(B)に何を記述すれば値を取得できますか?

  • C# DataGridView内での制御について

    初めて投稿します。 C#のwindowsアプリを開発しています。 開発ツールはVS2010を使用しています。 datagridview内の制御について困っているので 知恵を貸してください。 datagridviewのEditModeをEditOnEnterに設定し、常に入力モードにしています。 また、CellValidatingを使用し、各セルの必須チェックなどのエラーチェックを おこなっています。 Enterキー押下でCellValidatingイベントが発生し、エラーチェックを行う ことには問題ないのですが、矢印キーやマウスでのセル移動時にも、 CellValidatingイベントが発生します。 矢印キーやマウスでの操作の場合はCellValidatingイベントを発生させずに したいのですが、どうすればよいのでしょうか? 知っている方がいれば、知恵を貸してください。

  • DataGridView編集中のイベント取得

    VS2008を使用して勉強中の初心者です。 現在、習作しているアプリケーションの中で 以下の動作を実現させたいと思っています。 ・DataGridView編集時、エンターキーを押下した場合  「編集を終了して下のセルを選択する」から  「編集中の文章を改行させる」への変更。 ・DataGridView編集時、シフト+エンターキーを押下した場合  「編集中の文章を改行させる」から  「編集を終了する」への変更。 以上2点なのですが、そもそも編集中のDataGridViewへの 入力に対して、KeyPressイベント等を取得する方法がわからずに 実現できずにいます。 実装する為の方法・もしくは仕組みがわかるサイト等を ご存知の方がいらっしゃいましたら、よろしくお願いいたします。

  • DataGridViewでの入力チェック

    DataGridViewで入力チェックを行いたいのですが、移動先のセルが移動元のセルよりも下の列あるいは右下の場合だけ入力チェックをしたいのですが、どうしたらよいでしょうか? CellValidatingイベント等では、移動元のセル情報は取得できるのですが、移動先のセル情報が取得できません。 根本的にこのようなチェック機能自体問題があるでしょうか?

  • richtextで入力文字列確定時にイベント

    VB6ですが、 RichTextBoxで文字列を入力し、変換終了後Returnキーにて、確定をした時のイベントを取得したい。 KeyPressイベントやkeydownイベントは変換確定時には、IMEに占有されていてイベントが起きないのです。 具体的にどんなソフトを作っているのかというと、 1.入力済みの文字列の一部(例えば「AB」)を反転して選択。 2.そして新しい文字列を入力(例えば「あいうえお」)。 3.Returnキーで確定時に反転していた文字列を新しく入力した文字列の「あいうえお」の「うえ」の間に挿入した文字列を入れたい。 4.結果は、「あいうABえお」と入力される。 というもの 入力時にイベントを起こせれば、自力で何とかなると思うのですが…… 文章下手で申し訳ありません。 よろしくお願いします。

  • DataGridViewのセルのItem設定につい

    DataGridView内にコンボボックスのカラムを設定しました。 下記のサイトを参考にしました。 http://dobon.net/vb/dotnet/datagridview/comboboxdropdownstyle.html 入力した内容をカラム単位ではなく、セル単位で追加したかったため、 CellValidatingメソッドを下記の通り一部変更しました。 //CellValidatingイベントハンドラ private void DataGridView_CellValidating(object sender, DataGridViewCellValidatingEventArgs e) { DataGridView dgv = (DataGridView)sender; //該当する列か調べる if (dgv.Columns[e.ColumnIndex].Name == "sComboColumn" && dgv.Columns[e.ColumnIndex] is DataGridViewComboBoxColumn) { //DataGridViewComboBoxColumn cbc = // (DataGridViewComboBoxColumn)dgv.Columns[e.ColumnIndex]; // // ↓cellへ変更 // DataGridViewComboBoxCell cbc = (DataGridViewComboBoxCell)dgv.Rows[e.RowIndex].Cells[e.ColumnIndex]; //コンボボックスの項目に追加する if (!cbc.Items.Contains(e.FormattedValue)) { cbc.Items.Add(e.FormattedValue); } //セルの値を設定しないと、元に戻ってしまう dgv[e.ColumnIndex, e.RowIndex].Value = e.FormattedValue; } } コンボボックスに入力し、EnterやTabを押したタイミングでコンボボックスのリストに、 入力した文字列が追加されます。また、入力した文字列がセルに表示された状態になります。 しかし、その後同じセルに文字列を入力した場合、リストに文字列が追加されますが、 セルに表示される文字列はその前に入力された文字列のままです。 どのようにすれば入力後のセルの内容を設定できるかご存じの方がいれば ご教授いただきたいです。