TextRenderer.MeasureText
を使用してアイテムの幅を計算し、アイテムの幅の最大値に列の幅を設定できます。
カラムの幅を変更するにはWidth
カラムのプロパティを使用します。ドロップダウンメニューの幅のみを変更するには、DropDownWidth
プロパティを使用します。
// I suppose your column is at index 0
var c = this.dataGridView1.Columns[0] as DataGridViewComboBoxColumn;
c.Width = c.Items.Cast<Object>().Select(x => x.ToString())
.Max(x => TextRenderer.MeasureText(x, c.InheritedStyle.Font,
Size.Empty, TextFormatFlags.Default).Width);
あなたは、フォームのLoad
イベントハンドラにしたり、列のサイズをリセットすることがあり、他の場所で上記のコードを置くことができます。
注:上記の例のコンボボックスは、文字列型のものとします。しかし、どのようなタイプのアイテムでも使用でき、アイテムのテキストを抽出できます。ここでのポイントは、そのパラメータにTextRenderer.MeasureText
を使用することです。
VBバージョンは
Dim c = DirectCast(Me.DataGridView1.Columns(0), DataGridViewComboBoxColumn)
c.Width = c.Items.Cast(Of Object)().Select(Function(x) x.ToString()) _
.Max(Function(x) TextRenderer.MeasureText(x, c.InheritedStyle.Font, _
Size.Empty, TextFormatFlags.Default).Width)
あなたは答え:) –
に関するご質問がある場合は、私に教えてください 'TextRenderer'は、私が行方不明になったクラスの名前でした。それはこれを行う良い方法です。しかし、それは完全ではありません!ドロップダウンの矢印と内部のパディングを無視します。試行錯誤の結果、特定のディスプレイ設定(フォントサイズが14、それ以外のデフォルトはすべて)にはパディングに22ピクセルが追加で必要と判断されました。これでこのプロジェクトには十分です! – kvermeer
はい、パディングなどのスペースを追加する必要があります。['DisplayStyleForCurrentCellOnly'](https://msdn.microsoft.com/en-us/library/system.windows.forms.datagridviewcomboboxcolumn)もご覧ください。現在の列のみ(v = vs.110).aspx)の列のプロパティを表示します。現在のセルがこの列にあるとき、 'DisplayStyle'プロパティ値が' DataGridView'コントロール内の現在のセルにのみ適用されるかどうかを示します。 –