解決に時間がかかっていた処理ができた。
DataGridView に列を追加するのだが、列の順序が思ったとおりにならなかった。
たとえば、5つの列を追加する場合、
Columns.Add を5回繰り返すと、列は
1,2,3,4,5のようには並ばず、
5,1,4,2,3のようになっていた。
うまくいかなかった(Columns.Add を使った)結果は下のとおり。
Columns.Add ではなく Columns.Insert を使えば、思ったとおりになった。
【追記/補足 2014-11-18】
今回は列数・行数を任意に変えられる DataGridView を作っていた。
列数が変わると、いったん Columns.RemoveAt で全列を削除してから
新たに Columns.Add で列を追加していた。
Columns.Add でも1列のみ、2列だけのときは問題がなかったが、
3列以上になると列の順が思ったとおりではなかった。
それで Columns.Insert を使ったら、思いどおりの列順となった。
以下は、画像を収める DataGridView(名前は dgv_Image)に5つの列を追加するサンプル。
1.画像を収める列の宣言
dim imgColumn_0 As New DataGridViewImageColumn
dim imgColumn_1 As New DataGridViewImageColumn
dim imgColumn_2 As New DataGridViewImageColumn
dim imgColumn_3 As New DataGridViewImageColumn
dim imgColumn_4 As New DataGridViewImageColumn
2.列を5つ追加する
' --- Columns.Add ではなく、Columns.Insert を使う
dgv_Image.Columns.Insert(0, Me.imgColumn_0)
dgv_Image.Columns.Insert(0, Me.imgColumn_1)
dgv_Image.Columns.Insert(0, Me.imgColumn_2)
dgv_Image.Columns.Insert(0, Me.imgColumn_3)
dgv_Image.Columns.Insert(0, Me.imgColumn_4)
' --- 検証のための列ヘッダー
dgv_Image.Columns(0).HeaderText = "列1"
dgv_Image.Columns(1).HeaderText = "列2"
dgv_Image.Columns(2).HeaderText = "列3"
dgv_Image.Columns(3).HeaderText = "列4"
dgv_Image.Columns(4).HeaderText = "列5"
3.行を追加し、各セルに画像を収める処理
(これは省略)
実行すると、下のように期待どおりになった。
# 列が1から順に並んでいなくてもいいようなものだが、
同じフォーム上の別の DataGridView でサムネイル画像を表示しており、
dgv_Image ではそこから画像を取ってきて表示していた。
なので、画像の並びがそろわないと困る。
1次元的な DataGridView から2次元的なそれに画像を収めるときの不一致がこれで解消した。
単純なことだったが、時間を取られてしまったので、
似たようなことを考えている人への参考までに(低次元だと笑われそうだが)記事にする次第。
なお、開発環境は次のとおり。
Windows 8.1(64-bit)
Visual Studio Pro. 2013 (Update 4)、
言語は Basic (VB.NET)、
対象のフレームワークは .NET Framework 4.5
ブログ記事についてのお問い合わせは「質疑応答 掲示板」で・・・
ここをクリックして、北窓舎のサイトにもお立ち寄りください・・・
DataGridView に列を追加するのだが、列の順序が思ったとおりにならなかった。
たとえば、5つの列を追加する場合、
Columns.Add を5回繰り返すと、列は
1,2,3,4,5のようには並ばず、
5,1,4,2,3のようになっていた。
うまくいかなかった(Columns.Add を使った)結果は下のとおり。
Columns.Add ではなく Columns.Insert を使えば、思ったとおりになった。
【追記/補足 2014-11-18】
今回は列数・行数を任意に変えられる DataGridView を作っていた。
列数が変わると、いったん Columns.RemoveAt で全列を削除してから
新たに Columns.Add で列を追加していた。
Columns.Add でも1列のみ、2列だけのときは問題がなかったが、
3列以上になると列の順が思ったとおりではなかった。
それで Columns.Insert を使ったら、思いどおりの列順となった。
以下は、画像を収める DataGridView(名前は dgv_Image)に5つの列を追加するサンプル。
1.画像を収める列の宣言
dim imgColumn_0 As New DataGridViewImageColumn
dim imgColumn_1 As New DataGridViewImageColumn
dim imgColumn_2 As New DataGridViewImageColumn
dim imgColumn_3 As New DataGridViewImageColumn
dim imgColumn_4 As New DataGridViewImageColumn
2.列を5つ追加する
' --- Columns.Add ではなく、Columns.Insert を使う
dgv_Image.Columns.Insert(0, Me.imgColumn_0)
dgv_Image.Columns.Insert(0, Me.imgColumn_1)
dgv_Image.Columns.Insert(0, Me.imgColumn_2)
dgv_Image.Columns.Insert(0, Me.imgColumn_3)
dgv_Image.Columns.Insert(0, Me.imgColumn_4)
' --- 検証のための列ヘッダー
dgv_Image.Columns(0).HeaderText = "列1"
dgv_Image.Columns(1).HeaderText = "列2"
dgv_Image.Columns(2).HeaderText = "列3"
dgv_Image.Columns(3).HeaderText = "列4"
dgv_Image.Columns(4).HeaderText = "列5"
3.行を追加し、各セルに画像を収める処理
(これは省略)
実行すると、下のように期待どおりになった。
# 列が1から順に並んでいなくてもいいようなものだが、
同じフォーム上の別の DataGridView でサムネイル画像を表示しており、
dgv_Image ではそこから画像を取ってきて表示していた。
なので、画像の並びがそろわないと困る。
1次元的な DataGridView から2次元的なそれに画像を収めるときの不一致がこれで解消した。
単純なことだったが、時間を取られてしまったので、
似たようなことを考えている人への参考までに(低次元だと笑われそうだが)記事にする次第。
なお、開発環境は次のとおり。
Windows 8.1(64-bit)
Visual Studio Pro. 2013 (Update 4)、
言語は Basic (VB.NET)、
対象のフレームワークは .NET Framework 4.5
ブログ記事についてのお問い合わせは「質疑応答 掲示板」で・・・
ここをクリックして、北窓舎のサイトにもお立ち寄りください・・・
Microsoft Visual Studio Professional 2013 通常版 | |
マイクロソフト |
Microsoft Visual Studio Professional 2013 アップグレード版 | |
マイクロソフト |