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()

我有一个类似的问题;我想知道在自己绘制 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 回答