- PR -

DataGridView内のコンボボックスセルがちらつく現象について

1
投稿者投稿内容
k2
会議室デビュー日: 2008/06/27
投稿数: 1
投稿日時: 2008-06-29 17:11
[環境]
Windows XP
Visual Basic 2005

現在、DataGridViewを使用する画面を作成しています。
Timerコントロールを使用して連続してテキストボックスセルに値を書き込み続けている状態で
ユーザーがDataGridViewを操作する必要があるのですが、その際に件名にある現象が発生します。


具体的には下記の手順で現象が再現されます。

@フォームにデザイナでDataGridView、Timer、Buttonを配置。
Aフォームに下記のソースを貼り付けて実行。
BボタンをクリックしてタイマーのON/OFFを数回切り替える。
CタイマーをONにしてテキストボックスの値を書き換え続けている最中に、
 タイマーON前に選択されていたのと同じ行のコンボボックスを編集状態にすると
 表示のちらつきが発生してうまく項目が選択できなくなることがある。


DataSourceにDataTableを使用してバインドせず、.Rows.Add()で手動で行を作成した場合には
現象は発生しないようなのですが、できればDataSourceを使用して行を作成したいと思っています。

この現象の原因や解決方法をご存知の方いらっしゃいましたらよろしくお願いします。

コード:
Public Class Form1

  Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load

    Timer1.Interval = 10

    Dim column As DataGridViewColumn
    Dim source As New BindingSource()
    source.Add("item1")
    source.Add("item2")
    source.Add("item3")

    column = New DataGridViewComboBoxColumn()
    column.DataPropertyName = "column1"
    DirectCast(column, DataGridViewComboBoxColumn).DataSource = source
    DataGridView1.Columns.Add(column)

    column = New DataGridViewTextBoxColumn()
    column.DataPropertyName = "column2"
    DataGridView1.Columns.Add(column)

    Dim table As New DataTable()
    Dim col As DataColumn
    Dim row As DataRow

    For i As Integer = 1 To 2
      col = New DataColumn("column" & i.ToString)
      col.DataType = Type.GetType("System.String")
      table.Columns.Add(col)
    Next

    For i As Integer = 1 To 3
      row = table.NewRow()
      row("column1") = "item" & i.ToString
      row("column2") = ""
      table.Rows.Add(row)
    Next

    DataGridView1.DataSource = table

  End Sub

  Private Sub Timer1_Tick(ByVal sender As Object, ByVal e As System.EventArgs) Handles Timer1.Tick
    For i As Integer = 0 To DataGridView1.Rows.Count - 1
      DataGridView1.Rows(i).Cells(1).Value = DateTime.Now.Millisecond
    Next
  End Sub

  Private Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click
    Timer1.Enabled = Not Timer1.Enabled
  End Sub

End Class

1

スキルアップ/キャリアアップ(JOB@IT)