DataGridViewとTabControl

DataGridViewをTabControlに配置したところ、FormのLoadイベントで実行していた列のインデックスの指定が効かなくなった。

これは、TabControlに配置した場合、Tabが表示されるまでDataGridViewのハンドルが生成されないかららしい。

参考:
http://social.msdn.microsoft.com/forums/en-US/winforms/thread/2926099c-d8b5-4890-858c-39844cbd886e/

ということで、下記コードようなコードを書いたら、列のインデックスを指定できた。

‘DataGridView表示変更時
Private Sub mainDGV_VisibleChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles mainDGV.VisibleChanged
    If Me.mainDGV.IsHandleCreated Then
        Me.mainDGV.Columns("カラム1").DisplayIndex = 0
        Me.mainDGV.Columns("カラム2").DisplayIndex = 1
        Me.mainDGV.Columns("カラム3").DisplayIndex = 2
    End If
End Sub