DOBON.NET DOBON.NETプログラミング掲示板過去ログ

データグリッドビューとフォームの大きさについて

環境/言語:[windowsXP, VB20008express]
分類:[.NET]

はじめまして。
VB2008Expressを使用して、データグリッドビューを使っています。
フォームの大きさにあわせてデータグリッドビューの大きさを変えたいのですが、
AnchorがTop,Bottom,Left,Right
AutoSizeColumnsModeがFill
にしたら、フォームに合わせてデータグリッドビューが大きくはなるのですが、
今度は大きくなったまま小さくできなくなりました。

もし詳細わかりましたらよろしくお願い致します。
■No29782に返信(まつたけさんの記事)
> にしたら、フォームに合わせてデータグリッドビューが大きくはなるのですが、
> 今度は大きくなったまま小さくできなくなりました。

手元の環境では再現しませんでした。
実験に使ったのは下記のコードです。

Imports System.Windows.Forms
Public Class Form1
    Inherits Form

    Private WithEvents dgv As DataGridView
    Public Sub New()
        InitializeComponent()
        dgv = New DataGridView()
        dgv.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill
        dgv.RowCount = 20
        dgv.ColumnCount = 5
        dgv.Anchor = AnchorStyles.Top _
                  Or AnchorStyles.Bottom _
                  Or AnchorStyles.Left _
                  Or AnchorStyles.Right
        dgv.Size = Me.ClientSize - New Size(32, 32)
        dgv.Location = New Point(16, 16)
        Controls.Add(dgv)
    End Sub
End Class


> もし詳細わかりましたらよろしくお願い致します。
現象を再現可能な最低限のソースコードを提示できますか?
■No29784に返信(魔界の仮面弁士さんの記事)
お返事ありがとうございます。

AnchorがTop,Bottom,Left,Right
AutoSizeColumnsModeがFillは、デザイナのプロパティで設定しまして、
デザイナのソース(InitializeComponent()の中)を見ますと、

'DataGridView1
'
Me.DataGridView1.AllowUserToAddRows = False
Me.DataGridView1.Anchor = CType((((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Bottom) _
Or System.Windows.Forms.AnchorStyles.Left) _
Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles)
Me.DataGridView1.AutoSizeColumnsMode = System.Windows.Forms.DataGridViewAutoSizeColumnsMode.Fill
Me.DataGridView1.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize
Me.DataGridView1.Location = New System.Drawing.Point(12, 167)
Me.DataGridView1.Name = "DataGridView1"
Me.DataGridView1.RowTemplate.Height = 21
Me.DataGridView1.Size = New System.Drawing.Size(897, 352)
Me.DataGridView1.TabIndex = 9

とあります。AnchorとAutoSizeColumnsModeの部分をデザイナから設定しないで、
フォームのロード時に設定しても同じでした。

もうちょっと調べてみます。。
■No29795に返信(まつたけさんの記事)
>>> フォームに合わせてデータグリッドビューが大きくはなるのですが、
>>> 今度は大きくなったまま小さくできなくなりました。
この状況というのは、
 (1) フォームを小さくしても DataGridView が小さくならない
 (2) フォームを大きくできるが、フォームを小さくできない
のいずれのことでしょうか?


DataGridView には、列幅などに関する幾つかの不具合が知られているため、
先の回答では、私は (1) という意味で読み取っていましたが、
もしも (2) の状況なのだとしたら、Form の設定が
 AutoSize = True
 AutoSizeMode = GlowOnly
になっているのかも知れません。


> AnchorがTop,Bottom,Left,Right
> AutoSizeColumnsModeがFillは、デザイナのプロパティで設定しまして、

質問の意図が先の (1) という前提で、再度検証してみましたが、
提示いただいたコードを参考に、下記のようにしてみましたが
やはり再現されませんでした。
デザイナ側には一切手を加えていない、まっさらな Form での実験です。

Imports System.Windows.Forms
Public Class Form1
    Inherits Form

    Private WithEvents dgv As DataGridView
    Public Sub New()
        InitializeComponent()

        dgv = New DataGridView()
        dgv.AllowUserToAddRows = False
        dgv.Anchor = AnchorStyles.Top _
                  Or AnchorStyles.Bottom _
                  Or AnchorStyles.Left _
                  Or AnchorStyles.Right
        dgv.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill
        dgv.Location = New Point(16, 16)
        dgv.Name = "dgv"
        dgv.RowTemplate.Height = 21
        dgv.Size = Me.ClientSize - New Size(32, 32)
        dgv.TabIndex = 0

        Controls.Add(dgv)
        dgv.RowCount = 20
        dgv.ColumnCount = 50
    End Sub
End Class

> AnchorとAutoSizeColumnsModeの部分をデザイナから設定しないで、
> フォームのロード時に設定しても同じでした。
追加設定を行う場合には、Load イベントのほか、
コンストラクタや Shown を使う事も検討してみてください。
http://rucio.cocolog-nifty.com/blog/2011/04/post-f125.html
http://social.msdn.microsoft.com/Forums/ja/vbgeneralja/thread/332ca753-ca43-47b7-b6c6-60bc803e74e5
http://www.atmarkit.co.jp/fdotnet/dotnettips/470formshown/formshown.html
> (1) フォームを小さくしても DataGridView が小さくならない
> (2) フォームを大きくできるが、フォームを小さくできない
> のいずれのことでしょうか?

(2)です。。

>もしも (2) の状況なのだとしたら、Form の設定が
> AutoSize = True
> AutoSizeMode = GlowOnly
>になっているのかも知れません。

そうなっていました。。Falseにしたら直りました。
初歩的なミスで申し訳ありません。
丁寧なご解説非常にありがとうございました。
また何かありましたらどうぞよろしくお願いいたします。m(__)m
解決済み!

DOBON.NET | プログラミング道 | プログラミング掲示板