VB2005を使用しています。
フォームにDataGridViewを貼り付けて、
DockプロパティをFillに設定しています。
画面のサイズが変更された際に、同時にサイズ変更したいためです。
そこでColumnの幅も同時に広げられないものかと
思い質問させて頂きました。
Columnの比率を指定して変更できたら、とても嬉しいのですが。。。
別な方法でも構いませんので、
何か良い案がございましたらご教示頂けませんか?
よろしくお願い致します。
こんばんは。
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
>画面のサイズが変更された際に、同時にサイズ変更したいためです。
とあるので、Formサイズに従って拡大・縮小(?)するなら
・初期状態のDataGridViewの幅と、各Columnの幅を憶えておく
・Form1_Resize(ResizeEnd?)とかで、
拡大率 = (最新状態のDataGridViewの幅)/(初期状態のDataGridViewの幅)を計算して
各Columnの幅を、初期状態の幅×拡大率 に変更する
で、何とかなるのでは?(要は自力)
ちょっと力業だけど
あー、念のために補足(?)しておくと
Resizeの直前と直後だけで計算すると、そのたびに誤差が生じていって
何回もResizeすると ずれていくと思うので、
「たぶん」初期状態との比較で計算したほうが危険が少ないと思う
無事解決できました。
とても参考になりました。
ありがとうございます。
カスタムコントロールを作って対応してみたいと思っています。
ありがとうございました。
ツイート | ![]() |