DataGridViewのColumnの横幅を自動で設定したい。

解決


ジェイ  2008-07-16 21:52:40  No: 144979  IP: 192.*.*.*

VB2005を使用しています。
フォームにDataGridViewを貼り付けて、
DockプロパティをFillに設定しています。
画面のサイズが変更された際に、同時にサイズ変更したいためです。

そこでColumnの幅も同時に広げられないものかと
思い質問させて頂きました。
Columnの比率を指定して変更できたら、とても嬉しいのですが。。。

別な方法でも構いませんので、
何か良い案がございましたらご教示頂けませんか?

よろしくお願い致します。

編集 削除
こんばんは  2008-07-16 23:33:50  No: 144980  IP: 192.*.*.*

こんばんは。
FormのResizeBeginとResizeEndイベントハンドラで
リサイズ前後の幅を取得してやれば、一応、それらしい事は
できます。

Public Class Form1
    Private OldWidth As Integer

    Private Sub Form1_ResizeBegin(ByVal sender As Object, _
        ByVal e As System.EventArgs) Handles Me.ResizeBegin
        OldWidth = Me.Width
    End Sub

    Private Sub Form1_ResizeEnd(ByVal sender As Object, _
        ByVal e As System.EventArgs) Handles Me.ResizeEnd
        Dim NowWidth As Integer = Me.Width
        Dim Aspect As Single = NowWidth / OldWidth
        For i As Integer = 0 To Me.DataGridView1.Columns.Count - 1
            Me.DataGridView1.Columns(i).Width = _
                CInt(Me.DataGridView1.Columns(i).Width * Aspect)
        Next
    End Sub
End Class

編集 削除
 2008-07-17 08:57:17  No: 144981  IP: 192.*.*.*

>画面のサイズが変更された際に、同時にサイズ変更したいためです。
とあるので、Formサイズに従って拡大・縮小(?)するなら
・初期状態のDataGridViewの幅と、各Columnの幅を憶えておく
・Form1_Resize(ResizeEnd?)とかで、
  拡大率 = (最新状態のDataGridViewの幅)/(初期状態のDataGridViewの幅)を計算して
  各Columnの幅を、初期状態の幅×拡大率 に変更する
で、何とかなるのでは?(要は自力)
ちょっと力業だけど

編集 削除
 2008-07-17 09:01:11  No: 144982  IP: 192.*.*.*

あー、念のために補足(?)しておくと
Resizeの直前と直後だけで計算すると、そのたびに誤差が生じていって
何回もResizeすると ずれていくと思うので、
「たぶん」初期状態との比較で計算したほうが危険が少ないと思う

編集 削除
ジェイ  2008-07-18 13:48:38  No: 144983  IP: 192.*.*.*

無事解決できました。
とても参考になりました。
ありがとうございます。

カスタムコントロールを作って対応してみたいと思っています。
ありがとうございました。

編集 削除