如何使用 Visual Studio 中的设计器(不是 code-behind)在 WinForms 的 DataGridView 中为列 header 创建 multi-line 工具提示

How to create multi-line tooltips for a column header in a DataGridView in WinForms using the designer in Visual Studio (NOT code-behind)

我有一个带有 DataGridView 和几个列的 Form1:

我正在尝试将 multi-line tool-tip 添加到 Column1 header 这样当您将鼠标悬停在“Column 1 " 文本,则显示 tool-tip。我可以将 tool-tip 添加到 header,方法是打开 dataGridView 的 属性 页面中的 (Collections) 项,选择 Column1,然后在 ToolTipText 字段中添加文本,如下所示:

问题是我的工具提示很长(见图),我希望它在一定数量的字符后换行,但无论我怎样尝试,我都无法在 ToolTipText 中插入换行符 属性 在第二张图片中。它始终只是一长串连续的文本。

我的表格同时使用英语和法语,因此我使用的是资源文件 (.resx)。我不想进入并手动编辑表单的 self-gerenated .resx 文件,因为我过去有过手动编辑由 Visual Studio 生成的 .resx 文件的糟糕经历。我无法为列的工具提示添加换行符,这似乎很奇怪,但我可以通过按 Enter 键将 multi-line 工具提示添加到实际的 DataGridView(这在列的情况下不起作用):

我能想到的唯一解决方法是在项目的“属性”部分创建项目级 .resx 文件,然后手动将长工具提示添加到这些文件中。然后,当表单在运行时加载时,我会明确地将项目级资源文件中适当的 tool-tip 文本分配给列 header。像这样:dataGridView1.Column1.ToolTipText = Properties.MyToolTipStrings.ReallyLongToolTip

它应该可以与项目级别的 resx 文件一起使用,但它确实很笨重,我认为必须有更好的方法。有什么建议吗?

您可以使用以下代码为列 header 创建 multi-line 工具提示。

public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            foreach (DataGridViewColumn column in dataGridView1.Columns)
            {
                column.ToolTipText = Example.SpliceText(column.ToolTipText, 13);
            }
        }
    }

public static class Example
{
    public static string SpliceText(string text, int lineLength)
    {
        return Regex.Replace(text, "(.{" + lineLength + "})", "" + Environment.NewLine);
    }
}

结果: