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

解決


ジェイ  2008-07-17 06:52:40  No: 144979

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

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

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

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


こんばんは  2008-07-17 08:33:50  No: 144980

こんばんは。
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 17:57:17  No: 144981

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


  2008-07-17 18:01:11  No: 144982

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


ジェイ  2008-07-18 22:48:38  No: 144983

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

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


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加