我有一个多行的DataGridView,您如何在字符串Cell.Value
中找到自动换行的位置?
答案 0 :(得分:1)
string testLength = "1";
private void DataSheets_Load(object sender, EventArgs e) //DataGridView, 2 columns
{
clmData.DefaultCellStyle.WrapMode = DataGridViewTriState.True;
Data.AutoSizeRowsMode = DataGridViewAutoSizeRowsMode.AllCells;
Data.DefaultCellStyle.Font = new Font("Courier", 8);
RunWidth();
}
void RunWidth()
{
int l1 = len(testLength);
int l2 = len(testLength + testLength);
int perChar = l2 - l1;
int pad = l1 - perChar;
int s7 = pad + (perChar * 75);
int s5 = pad + (perChar * 50);
Data.Columns[0].Width = s7;
Data.Columns[1].Width = s5;
}
public int len(string text)
{
Size te = TextRenderer.MeasureText(text, new Font("Courier", 8));
return te.Width;
}
我自己解决了这个问题,但是如果有人找到更多方法来找到适用的类似功能,请继续发布结果。
答案 1 :(得分:0)
仅仅因为它有很多好的信息:
Here's a very well elaborated answer on differences between TextRenderer.MeasureText()
and Graphics.MeasureString()
我有一个类似的问题;我想知道通过包装when drawing a DataGridViewRow
by myself(代码是C ++ / CLI)创建了多少行:
void PaintRow (Object^ sender, DataGridViewRowPrePaintEventArgs^ e)
{
...
int iCharacters = 0, iLines = 0;
SizeF oLayoutArea ((float)dgvRow->Cells[ixCell]->Size.Width, 0);
SizeF oTextSize = e->Graphics->MeasureString (sText,
dgvRow->Cells[ixCell]->InheritedStyle->Font,
oLayoutArea,
oStringFormat,
iCharacters,
iLines);
关于你的问题:
我会采用相同的代码,并找出完整字符串创建了多少行,例如2行。
然后取一半的字符串,并检查你得到多少行,例如1行。
因为它之前的线条较少,我会再次采用更多文本(总是差异的一半)并再次测试。
继续,直到你把它分解为一个角色,并得到适合的长度而不包裹。