我有一个多行 DataGridView,您如何找到字符串中自动换行的位置Cell.Value
?
问问题
134 次
2 回答
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;
}
我自己解决了它,但如果有人找到更多方法来找到适用的类似功能,请继续发布结果。
于 2013-02-22T19:15:52.603 回答
0
仅仅因为它有很多很好的信息:
这是一个非常详细的关于和之间差异的TextRenderer.MeasureText()
答案Graphics.MeasureString()
我有一个类似的问题;我想知道在自己绘制 a 时DataGridViewRow
通过换行创建了多少行(代码为 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 行。
因为它的行数比以前少,所以我会再次获取更多文本(总是差一半)并再次测试。继续,直到您将其分解为一个字符并获得适合不换行的结果长度。
于 2017-05-27T08:40:25.800 回答