datagridviewについて への返答
投稿で使用できる特殊コードの説明。(別タブで開きます。)
以下の返答は逆順(新しい順)に並んでいます。
投稿者 魔界の仮面弁士  (社会人)
投稿日時
2011/11/28 15:52:12
「一方を選択した場合は、他方は選択解除したい」という意味の場合:
-------------------------------------------------------
「同じデータを表示しているときに、カーソルの連動を止めたい」という意味の場合:
-------------------------------------------------------
「TextBox.HideSelection = True のように、フォーカスが外れると選択状況を隠すが、
フォーカスが戻ると元の選択状態に戻るようにしたい」という意味の場合:
-------------------------------------------------------
「ListView.HideSelection = False のように、フォーカスがあるときとないときで
選択されているセルの色が変更されるようにしたい」という意味の場合:
Private Sub DataGridView1_SelectionChanged(ByVal sender As Object, _
ByVal e As EventArgs) Handles DataGridView1.SelectionChanged
DataGridView2.ClearSelection()
End Sub
Private Sub DataGridView2_SelectionChanged(ByVal sender As Object, _
ByVal e As EventArgs) Handles DataGridView2.SelectionChanged
DataGridView1.ClearSelection()
End Sub
-------------------------------------------------------
「同じデータを表示しているときに、カーソルの連動を止めたい」という意味の場合:
'修正前
Public Class Form1
Private ds As New DataSet()
Private Sub Form1_Load(ByVal sender As Object, ByVal e As EventArgs) Handles Me.Load
Dim tbl As DataTable = ds.Tables.Add("Table1")
tbl.Columns.Add("Col1", GetType(Integer))
For r As Integer = 1 To 20
tbl.Rows.Add(r)
Next
DataGridView1.DataSource = ds
DataGridView1.DataMember = "Table1"
DataGridView2.DataSource = ds
DataGridView2.DataMember = "Table1"
End Sub
End Class
'修正後
Public Class Form1
Private ds As New DataSet()
Private Sub Form1_Load(ByVal sender As Object, ByVal e As EventArgs) Handles Me.Load
Dim tbl As DataTable = ds.Tables.Add("Table1")
tbl.Columns.Add("Col1", GetType(Integer))
For r As Integer = 1 To 20
tbl.Rows.Add(r)
Next
BindingSource0.DataSource = ds
BindingSource1.DataSource = BindingSource0
BindingSource1.DataMember = "Table1"
DataGridView1.DataSource = BindingSource1
BindingSource2.DataSource = BindingSource0
BindingSource2.DataMember = "Table1"
DataGridView2.DataSource = BindingSource2
End Sub
End Class
-------------------------------------------------------
「TextBox.HideSelection = True のように、フォーカスが外れると選択状況を隠すが、
フォーカスが戻ると元の選択状態に戻るようにしたい」という意味の場合:
Private Sub DataGridView1_Enter(ByVal sender As Object, _
ByVal e As EventArgs) Handles DataGridView1.Enter
DataGridView1.DefaultCellStyle.SelectionBackColor = SystemColors.Highlight
DataGridView1.DefaultCellStyle.SelectionForeColor = SystemColors.HighlightText
End Sub
Private Sub DataGridView1_Leave(ByVal sender As Object, _
ByVal e As EventArgs) Handles DataGridView1.Leave
DataGridView1.DefaultCellStyle.SelectionBackColor = DataGridView1.DefaultCellStyle.BackColor
DataGridView1.DefaultCellStyle.SelectionForeColor = DataGridView1.DefaultCellStyle.ForeColor
End Sub
-------------------------------------------------------
「ListView.HideSelection = False のように、フォーカスがあるときとないときで
選択されているセルの色が変更されるようにしたい」という意味の場合:
Private Sub DataGridView1_Enter(ByVal sender As Object, _
ByVal e As EventArgs) Handles DataGridView1.Enter
DataGridView1.DefaultCellStyle.SelectionBackColor = SystemColors.Highlight
DataGridView1.DefaultCellStyle.SelectionForeColor = SystemColors.HighlightText
End Sub
Private Sub DataGridView1_Leave(ByVal sender As Object, _
ByVal e As EventArgs) Handles DataGridView1.Leave
DataGridView1.DefaultCellStyle.SelectionBackColor = SystemColors.ButtonFace
DataGridView1.DefaultCellStyle.SelectionForeColor = SystemColors.ControlText
End Sub
投稿者 shu  (社会人)
投稿日時
2011/11/28 15:03:21
片方を選択したらもう片方を非選択状態にする。
例えば、こんな感じ
For Each cell In DataGridView1.SelectedCells.OfType(Of DataGridViewCell)()
cell.Selected = False
Next
例えば、こんな感じ
For Each cell In DataGridView1.SelectedCells.OfType(Of DataGridViewCell)()
cell.Selected = False
Next
投稿者 うさぎ  (学生)
投稿日時
2011/11/27 23:02:57
VB2005を勉強中の者です。
Form上に2つのdatagridviewを配置しているのですが、datagridview1内のセルをクリックしdatagridview2内のセルをクリックすればどちらも選択されてしまいます。どちらか片方でしか選択できないようにしたいのですがどのようにすればいいのでしょうか。よろしくお願いいたします。
Form上に2つのdatagridviewを配置しているのですが、datagridview1内のセルをクリックしdatagridview2内のセルをクリックすればどちらも選択されてしまいます。どちらか片方でしか選択できないようにしたいのですがどのようにすればいいのでしょうか。よろしくお願いいたします。
うまくいきました!
助かりましたm(__)m