0

複数行のDataGridViewがありますが、文字列のどこでワードラップが行われるかをどのように見つけますCell.Valueか?

4

2 に答える 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 に答える