DataGridView AutoSizeの高さを、それに含まれる行の量に基づいて作成しようとしています。現在、私は次の行でこれを達成することができました:DataGridView Auto Height - DataGridViewの高さを自動サイズ設定する方法
しかしこれはDataGridViewのを遮断します、水平スクロールバーが表示されなくなります。
水平スクロールバーを失うことなく高さを自動化できますか?
DataGridView AutoSizeの高さを、それに含まれる行の量に基づいて作成しようとしています。現在、私は次の行でこれを達成することができました:DataGridView Auto Height - DataGridViewの高さを自動サイズ設定する方法
しかしこれはDataGridViewのを遮断します、水平スクロールバーが表示されなくなります。
水平スクロールバーを失うことなく高さを自動化できますか?
オプション1 - オーバーライドのgetPreferredSize
あなたはDataGridView
のGetPreferredSize
メソッドをオーバーライドして、新しい提案サイズnew Size(this.Width, proposedSize.Height)
を使用して基本メソッドを呼び出すことができます。自動サイズルールはその高さに適用される一方、この方法では、コントロールの現在の幅はそのまま残ります。
using System.Drawing;
using System.Windows.Forms;
public class MyDataGridView : DataGridView
{
public override Size GetPreferredSize(Size proposedSize)
{
return base.GetPreferredSize(new Size(this.Width, proposedSize.Height));
}
}
オプション2 - 計算の自動サイズの高さに基づいて高さを設定
DataGridView
から派生したくない場合は、GetPreferredSize
を呼び出してnew Size(0, 0)
を呼び出し、DataGridView
の高さを結果の高さに設定すると、DataGridView
の高さのみを変更することができます。あなたが必要な場合は、RowsRemoved
、RowsAdded
にいくつかの他のイベントを自動高さを設定する必要があります
void AutoHeightGrid(DataGridView grid)
{
var proposedSize = grid.GetPreferredSize(new Size(0, 0));
grid.Height = proposedSize.Height;
}
private void Form1_Load(object sender, EventArgs e)
{
dataGridView1.RowsAdded += (obj, arg) => AutoHeightGrid(dataGridView1);
dataGridView1.RowsRemoved += (obj, arg) => AutoHeightGrid(dataGridView1);
//Set data source
//dataGridView1.DataSource = something;
}
あなたがFont
、行の高さを変えるなど、グリッド内のすべての変更は、グリッドのサイズを変更する原因となりますことを確認するには、あなたをPaint
イベントのメソッドを呼び出すことができます。
オプション3 - あなたは、DataGridView
から派生したくないあなたは、グリッドのMaximumSize
プロパティを使用することができれば、ハンスで述べたようにまた
のMaximumSizeを設定します。あなたはnew Size(this.dataGridView1.Width, 0)
に設定することができます
dataGridView1.MaximumSize = new Size(this.dataGridView1.Width, 0);
dataGridView1.AutoSize = true;
注MaximumSize
を使用すると、ユーザは、左右のアンカーによって、グリッド幅の変更をさせたいときにとてもフレンドリーではありませんので
が、私はオプションを使用することを好みます1またはオプション2。
MaximumSizeプロパティを設定します。 –
@HansPassant私は「MaximumSize」をテストして、それが動作しないことを確信させたときに間違いが何をしたのか分かりませんが、あなたのコメントを読んでもう一度試してみました。はい、 '新しいサイズ(this.dataGridView1.Width、0)'の設定は完全に機能しています。 –
@HansPassantしかし、ユーザがグリッドの幅を変更させたい場合、 'MaximumSize'を使うのはそれほど親切ではないので、私は答えに* Option 1 *または* Option 2 *を使うのが好きです。 –