複数行の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()
私も同様の問題を抱えていました。自分で描画するときに折り返すこと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行)。
以前よりも行が少ないので、もう一度テキストを増やして(常に差の半分)、もう一度テストします。1文字に分解し、折り返さずに収まる長さになるまで続けます。
于 2017-05-27T08:40:25.800 に答える