• ベストアンサー

【VB】データグリッドビューでのセルチェンジイベントについて

いつもお世話になります。 VB2005です。 基本的な質問だと思います。 データグリッドビューコントロールのセルチェンジイベントにプログラムを書いています。 どのセルをアクティブにしても処理が走るのですが、これを2列目を選択したときだけにしたいのです。 どんなコードを書けばいいんでしょうか? 思いついたので if datagridview1.columns(2).selected then   処理内容 end if だったのですが、駄目でした。(><)

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

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

お世話になります。 > データグリッドビューコントロールのセルチェンジイベントにプログラムを書いています。 はて?CellChange Event ってありましたっけ? こういう感じでどうでしょう。 Private Sub Form8_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load   'TODO: このコード行はデータを 'NorthwindDataSet.Categories' テーブルに読み込みます。必要に応じて移動、または削除をしてください。   Me.CategoriesTableAdapter.Fill(Me.NorthwindDataSet.Categories)   AddHandler DataGridView1.CellEnter, AddressOf Me.DataGridView1_CellEnter End Sub Private Sub DataGridView1_CellEnter(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs)   If e.ColumnIndex = 2 Then     Console.WriteLine("DataGridView1_CellEnter")   End If End Sub

参考URL:
http://msdn2.microsoft.com/ja-jp/library/system.windows.forms.datagridview.cellenter.aspx
sineminna
質問者

お礼

早速のご回答ありがとうございます。 ご回答をヒントに If Datagridview1.CurrentCell.ColumnIndex = 2 Then でいけました。

関連するQ&A

  • VB2005 DataGridView で選択状態(青色反転)

    DataGridViewの件で質問したいのですが。 よろしくお願いします。 VB2005で、DataGridViewの特定のセルが選択されて値が青色反転した Selectイベントのような状態にしたいのですが。 例えば、下のようなDataGtridViewがあったとして, 例 ------------------ |ID | X | Y | ------------------ |001| 100 | | ------------------ |002| 150 | | ------------------ |003| 105 | | ------------------ ID が002の行で、Y列のセルにカーソルが入りXと違う数を入力したら、メッセージを 表示させて、そのセルを青色反転させる処理を作りたいのですが。下の行のセルに 移動してしまいます。 そこで下記のようなコードを書きました。 Private Sub DataTable1DataGridView_CellValidating(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DataGridViewCellValidatingEventArgs) Handles DataTable1DataGridView.CellValidating If e.ColumnIndex <> Me.DataTable1DataGridView.Columns("Y").Index Then Exit Sub If Me.DataTable1DataGridView("X", e.RowIndex).Value IsNot Nothing AndAlso _ Me.DataTable1DataGridView.EditingControl IsNot Nothing Then If Not Me.DataTable1DataGridView("X", e.RowIndex).Value.ToString.Equals(Me.DataTable1DataGridView.EditingControl.Text) Then MsgBox("X <> Y", MsgBoxStyle.OkOnly) Me.DataTable1DataGridView.BeginEdit(True) 'e.Cancel = True End If End If End Sub e.cancel = True だとセルにはとどまりますが。セルが選択状態にはなりません。 BeginEdit(True)を使うと下のセルが選択状態になります。 アドバイスいただけたら幸いです。よろしくお願い致します。 開発環境 VB2005 Visual Studio 2005 Standard Edition(SP1) Windows XP Pro SP2

  • データグリッドビュー右クリック選択について

    書き方法で右クリックにて セルの選択をしてコンテキストメニューを表示させて cellに追加文字を追加させることをしてます。 Multiselect=false で 選択はfullselectrow です。 データバインドでdatatableをバインドさせてます。 .CurrentRowが前のままになってしまって データがずれてしまいます。 どのようにすれば currentrowがきちんと取得できるでしょうか? Private Sub DataGridView1_CellMouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellMouseEventArgs) Handles DataGridView1.CellMouseDown If e.Button = Windows.Forms.MouseButtons.Right Then DataGridView1.ClearSelection() If e.RowIndex < 0 Then Exit Sub DataGridView1.Rows(e.RowIndex).Selected = True End If End Sub

  • VB2010でデータグリッドビューに列追加

    VB2010でデータグリッドビューを使用したいのですが、 下記のコードを実行すると、 ※エラー1「指定された列は DataGridView コントロールに既に属しています。」がでます。 列インデックスがいるのかなと、コードを追加してみると ※エラー2「プロパティIndexはReadOnlyです」がでました。 どう直せばよいかわかるかた教えてください。 どうぞよろしくお願いします。 変数に入っているもの 系列数=2 系列名(0)=deg 系列名(1)=V 系列名(2)=P Public Class Form2 Private Sub Form2_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Me.Text = "データビュー" '初期化 Me.DataGridView1.Columns.Clear() '列追加 Dim i, j As Long Dim TBColumn As New DataGridViewTextBoxColumn() For i = 0 To 系列数 TBColumn.Name = 系列名(i) TBColumn.Index = i '←※エラー2 エラー後に追加してみた Me.DataGridView1.Columns.Add(TBColumn) '←※エラー1 Next i '行追加 Me.DataGridView1.RowCount = データ数 'データ追加 For j = 1 To データ数 For i = 0 To 系列数 Me.DataGridView1(系列名(i), CInt(j - 1)).Value = グラフデータ(i, j) Next i Next j '列幅設定 For i = 0 To DataGridView1.Columns.Count - 1 Me.DataGridView1.Columns(i.ToString).Width = 30 Next i End Sub End Class

  • データグリッドビューの一番最初の行に列を追加したい

    お世話になっています。 VB2005です。 タイトル通りなのですが、DataGridViewの一番最初の列(0列目)に列を追加したいのです。 DataGridView1.Columns.Add() では一番最後の行に追加されてしまいます。 ヘルプやネット上を見てもわからず・・・ どなたかご存じの方教えてください。

  • VB.NET DataGridViewでIsNewRowが正しく判定されない

    If DataGridView1.CurrentRow.IsNewRow = False Then '処理を記述 End If というコードを書いているのですが、 新規行を選択しているにもかかわらず、IsNewRowプロパティがFalseとなってしまいます。 原因として考えられる事がありましたら、ご教授願います。

  • VB2008ビギナーです、DataGlidViewにORACLEデータ

    VB2008ビギナーです、DataGlidViewにORACLEデーターを読み込んで加工する プログラムを作成中です。 文字型セルの内容を消した時(NULL値)に比較分がエラーになります、 NULL値の場合はこの比較を行わないように修正したいのですが該当セルが NULL値かどうかの聞き方が良く分かりません、どなたか教えて頂けますよう 宜しくお願い致します。 以下、エラーメッセージ System.InvalidCastException はハンドルされませんでした。 Message="演算子 '=' は 型 'DBNull' と 文字列 "手掛け" に対して定義されていません。" Source="Microsoft.VisualBasic" StackTrace: 以下、プログラム内容 If DataGridView1.Item(16, i).Value IsNot Nothing Then If DataGridView1.Item(16, i).Value = "手掛け" Then <---- エラーになる行 DataGridView1(16, i).Style.ForeColor = Color.Red Else DataGridView1(16, i).Style.ForeColor = Color.Black End If End If

  • データグリッドビューの任意の列を削除

    VB2010にて、下記のコードを実行すると、左端にいらない列が表示されます。 左端にコンボボックスを表示したいのですが、うまくいきません。 左端の列を削除する方法。 または、左端にコンボボックスを表示する方法を教えていただけませんでしょうか。 ご存知の方、どうぞよろしくお願いいたします。 '■■■データグリッドビューセット■■■ '初期化 Me.DataGridView1.Columns.Clear() '最下部の新しい行を非表示 Me.DataGridView1.AllowUserToAddRows = False '行追加 Me.DataGridView1.RowCount = 気筒数 + 2 'コンボボックス列を追加 Dim i As Integer Dim BS As New BindingSource() For i = 1 To 系列数 BS.Add(系列名(i)) Next i Dim ComboBox As New DataGridViewComboBoxColumn() ComboBox.HeaderText = "系列名を選択" ComboBox.DataSource = BS Me.DataGridView1.Columns.Add(ComboBox) Me.DataGridView1.Columns(0).Width = 110

  • VB2005 Datagridview の仮想モードでメモリリーク

    VB2005にてDatagridviewの仮想モードを実装しています。 DataGridviewを全件ループ処理する場合にメモリが増加します。完了してもそのままメモリが減りません。これを回避する方法がありますか?CellValueNeededはメモリを消費し続けるものなのでしょうか。 実際のプログラムでは件数が多い場合にメモリの消費が止まらずメモリ不足に陥ります。 以下は単純なコードにしたサンプルです。これでもデバッグモードで動かすと起動時20Mくらいのメモリ消費がループ処理時に100Mくらいにに増えます。 ※実際の処理でバインドしているデータ(datatable等)の方をループさせるという代替案がありますが、今回はdatagridviewから行った結果のメモリ不足についてご教授いただければと思います。 Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load With Me.DataGridView1 .Columns.Add("Column1", "列1") .Columns.Add("Column2", "列2") .Columns.Add("Column3", "列4") .Columns.Add("Column4", "列4") .Columns.Add("Column5", "列5") .Columns.Add("Column6", "列6") .Columns.Add("Column7", "列7") .VirtualMode = True .RowCount = 100000 End With End Sub Private Sub DataGridView1_CellValueNeeded(ByVal sender As Object, _ ByVal e As System.Windows.Forms.DataGridViewCellValueEventArgs) _ Handles DataGridView1.CellValueNeeded e.Value = e.RowIndex.ToString & "," & e.ColumnIndex.ToString End Sub Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click For i As Integer = 0 To DataGridView1.Rows.Count - 1 DataGridView1.Rows(i).Cells(1).Value = DataGridView1.Rows(i).Cells(2).Value Next MsgBox("終了") End Sub

  • DataGridViewの特定のセルで選択状態を保ちたい VB2005

    DataGridViewの件で質問したいのですが。 よろしくお願いします。 VB2005で、DataGridViewの特定のセルでカーソルがとどまる(選択状態)ようにしたいのですが 思ったように動いてくれません。例えば、下のようなDataGtridViewがあったとして, 例 ------------------ |ID | X | Y | ------------------ |001| 100 | | ------------------ |002| 150 | | ------------------ |003| 105 | | ------------------ ID が002の行で、Y列のセルにカーソルが入りXと違う数を入力したら、メッセージを 表示させて、そのセルにカーソルがとどまる処理を作りたいのですが。下の行のセルに 移動してしまいます。  DataGridView_CellEndEditイベントやDataGridView1_CellValueChangedなどで カーソルがとどまる処理をしているつもりなのです下の行に移動してしまいます。 DataGridViewの初期設定の問題でしょうか? Private Sub DataGridView1_CellValueChanged(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles DataGridView1.CellValueChanged Dim DgvRow As Integer '行をセット DgvRow = e.RowIndex ' X と Yが異なれば、メッセージ表示 If DataGridView1("X", e.RowIndex).Value <> DataGridView1("Y", e.RowIndex).Value Then MsgBox("X <> Y", MsgBoxStyle.OkOnly) Me.DataGridView1.CurrentCell = Me.DataGridView1("Y", DgvRow) ' これも駄目だった ↓ 'Me.DataGridView1.CurrentCell = Me.DataGridView1("Y", e.RowIndex - 1) End If End Sub アドバイスいただけたら幸いです。よろしくお願い致します。 開発環境 VB2005 Visual Studio 2005 Standard Edition(SP1) Windows XP Pro SP2

  • VB2005EE:DataGridViewでチェックボックスを設けるには

    はじめまして DataGridView(VB2005EE)でチェックボックスを設ける方法を教えていただきたく質問させていただきました。 Public Class Form1 Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load '3つの列を設定し,ABCという列名をつける DataGridView1.ColumnCount = 5 DataGridView1.Columns(0).HeaderText = "A" DataGridView1.Columns(1).HeaderText = "B" DataGridView1.Columns(2).HeaderText = "C" Dim myNewCell As New DataGridViewCheckBoxCell DataGridView1.Columns.Insert(3, New DataGridViewColumn(myNewCell)) DataGridView1.Columns.Item(3).HeaderText = "チェックボックス" DataGridView1.Columns.Item(3).Name = "識別名" DataGridView1.RowCount = 4 '最下行に管理用の行設置 End Sub End Class 手元の本を参考に上記のコードでコンパイルを行うと, >DataGridViewで釣りの例外が発生しました: >System.FormatException:セルのフォーマットされた値に間違った型が>指定されています。 >この既定のダイアログを置き換えるには,DataErrorイベントをハンド>ルしてください。 というエラーダイアログが発生します。 まだプログラミングを始めたばかりという事もあり,右も左もわかりませんが,ご教授お願い致します。