【问题标题】:WinForm wrap text if current row width is filled如果填充了当前行宽,则 WinForm 自动换行
【发布时间】:2018-09-01 08:34:00
【问题描述】:

我的 WinForm 中有 DataGridView。我将AutoSizeColumnsMode 设置为Fill,因为如果用户调整窗口大小,我不需要空格。

我想要达到的目标。例如,用户在某个单元格中键入一些文本。当文本宽度变为单元格宽度时,文本必须换行。
可能是这样的:

|Cell Header|
-------------
|text-text  |

|Cell Header|
-------------
|text-text  |
|more text  |
|on the new |
|line       |

我的列可以按用户调整大小。所以这个:

|Cell Header|
-------------
|text-text  |
|more text  |
|on the new |
|line       |

可能会这样:

|Cell Header        |
---------------------
|text-text more text|
|on the new line    |

我从其他 SO 答案中尝试过的内容:

  • AutoResizeRowsMode 设置为AllCells - 没有帮助
  • DefaultCellStyle.WrapMode 设置为True - 没有帮助

我怎样才能真正做到这一点?

编辑:列设置:

编辑#2:

【问题讨论】:

    标签: c# .net winforms datagridview


    【解决方案1】:

    设置RowsDefaultCellStyle.Wrapmode = true 而不是DefaultCellStyle.WrapMode = true

    我对两个网格都使用了默认设置。这是我的设置:

    这是代码

    【讨论】:

    • 没有帮助,抱歉
    • 我对 datagridview 都使用默认设置。这是我的 datagridview 代码的唯一区别:dgv2.RowsDefaultCellStyle.WrapMode = DataGridViewTriState.True
    【解决方案2】:

    除了为列设置换行模式和自动大小模式外,您还需要为行设置大小模式。

    public class Model
    {
        public int Id { get; set; }
        public string Text { get; set; }
    }
    private void Form1_Load(object sender, EventArgs e)
    {
        var list = new List<Model>
        {
            new Model{Id = 1, Text = "Lorem ipsum" },
            new Model{Id = 2, Text = "Lorem ipsum dolor sit amet." },
            new Model{Id = 3, Text = "Lorem ipsum dolor sit amet, consectetur adipiscing elit." },
        };
        dataGridView1.DataSource = list;
        dataGridView1.Columns["Text"].AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill;
        dataGridView1.Columns["Text"].DefaultCellStyle.WrapMode = DataGridViewTriState.True;
        dataGridView1.AutoSizeRowsMode = DataGridViewAutoSizeRowsMode.AllCells;
    }
    

    【讨论】:

    • 按照您的建议,我已经在Load nethod 中对其进行了测试。还是有问题(
    • 也许问题是我的列是预定义的?在您的示例中,它们不是
    • 预定义列与新列的唯一区别在于应用于列的设置。您总是需要在干净的环境中测试您共享的解决方案。查看屏幕截图,它按预期工作。
    • 请看streamable.com/9b5s6(用你的代码测试)
    • 不用担心,如果您想自定义渲染单元格,如果通过更改属性无法满足要求,您可以处理CellPainting事件并根据您的自定义逻辑。您可以找到example here
    猜你喜欢
    • 1970-01-01
    • 2012-11-25
    • 2022-08-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-18
    相关资源
    最近更新 更多