DataGridViewTextBox
を行うラッピング。それは、あなたが長いテキストを持っているならば、単語の最後にブレークが適用されることを意味します。あなたの要件に基づいて、単語の折り返しをするときに改行が必要です。そのためには、この方法をカスタムセルを作成して、文字ブレークの折り返しを実行する必要があります。文字ブレークワードラップに基づいて、セル/行の高さを計算する
あなたは、これらの設定を行うことができます。
は、あなたの列にDataGridView
の幅を使用するには、あなたはそれがFill
からAutoSizeMode
だ設定する必要があります。この方法では、列の幅がグリッドを埋めるようになり、グリッドのサイズに応じてサイズが変更されます。また、複数の列がある場合は、FillWeight
を設定して、他の列に対する列サイズの割合を制御できます。
列のテキストを折り返すには、をDataGridViewTriState.True
に設定する必要があります。
をDataGridView
からDataGridViewAutoSizeRowsMode.AllCells
に設定する必要があります。
作成したカスタムセルをCellTemplate
という列に登録します。
MyDataGridViewTextBoxCell
このセルは、文字ブレークの代わりに、単語の区切りを使用してテキストの折り返しを行います。
public class MyDataGridViewTextBoxCell:DataGridViewTextBoxCell
{
protected override Size GetPreferredSize(Graphics graphics,
DataGridViewCellStyle cellStyle, int rowIndex, Size constraintSize)
{
if(cellStyle.WrapMode== DataGridViewTriState.True && this.RowIndex>=0)
{
var value= string.Format("{0}", this.FormattedValue);
using (var g = this.OwningColumn.DataGridView.CreateGraphics())
{
var r = g.MeasureString(value, cellStyle.Font, this.OwningColumn.Width)
.ToSize();
r.Width += cellStyle.Padding.Left + cellStyle.Padding.Right;
r.Height += cellStyle.Padding.Top + cellStyle.Padding.Bottom;
return r;
}
}
else
{
return base.GetPreferredSize(graphics, cellStyle, rowIndex, constraintSize);
}
}
protected override void Paint(Graphics graphics, Rectangle clipBounds,
Rectangle cellBounds, int rowIndex, DataGridViewElementStates cellState,
object value, object formattedValue, string errorText,
DataGridViewCellStyle cellStyle,
DataGridViewAdvancedBorderStyle advancedBorderStyle,
DataGridViewPaintParts paintParts)
{
base.Paint(graphics, clipBounds, cellBounds, rowIndex, cellState, value,
formattedValue, errorText, cellStyle, advancedBorderStyle,
paintParts & ~ DataGridViewPaintParts.ContentForeground);
graphics.DrawString(string.Format("{0}", formattedValue),
cellStyle.Font, Brushes.Black, cellBounds);
}
}
例
public class Model
{
public string Text { get; set; }
}
BindingList<Model> list = new BindingList<Model>();
private void Form1_Load(object sender, EventArgs e)
{
var column1 = new DataGridViewTextBoxColumn();
column1.CellTemplate = new MyDataGridViewTextBoxCell();
column1.AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill;
column1.DataPropertyName = "Text";
column1.DefaultCellStyle = new DataGridViewCellStyle();
column1.DefaultCellStyle.WrapMode = DataGridViewTriState.True;
column1.HeaderText = "Text";
column1.Name = "column1";
dataGridView1.AutoSizeRowsMode = DataGridViewAutoSizeRowsMode.AllCells;
dataGridView1.Columns.Add(column1);
this.dataGridView1.DataSource = list;
}
private void button1_Click(object sender, EventArgs e)
{
list.Add(new Model() { Text = textBox1.Text });
}
その質問@Natriumテキストボックス、非常に異なっているのDataGridView、このものをいいます。 – stuartd
私のテストプログラムで動作します。あなたはDefaultCellStyle.WapModeをどこかで上書きすることができますか? linqを使用してフォームのロードでこれを確認してください。 dataGridView1.Rows.SelectMany(row => row.Cells).All(cell => cell.InheritedStyle == DataGridViewTriState.True); –
単語がスペースで区切られていると、それが折り返されますが、長い文字列が1つの場合は折り返しが機能しません。 – KChow