如何在Winforms中阻止按钮控件中的文本分解成多行?

时间:2019-01-13 13:09:29

标签: c# winforms button controls

我有一个Windows Forms项目,该项目根据变量设置按钮文本。字体很大,以提高可读性,但是这意味着某些单词太长而无法很好地适合按钮,并且最后几个字符分成多行。

是否可以使用算法或属性来调整按钮内文本的大小以防止这种情况发生?

我不想尝试将文本放在一行上,我只是想阻止文本拆分单词。

2 个答案:

答案 0 :(得分:0)

我不确定,但是这里不应该有任何可以为您提供帮助的算法(即使是AI算法)。约束是您要保持字体大小和按钮大小相同。但是,您可以按照以下说明解决问题。

  1. 使用缩写文本。例如前几个单词(字符)/文本的缩写。通常,如果未设置头像,则android手机,skype或任何其他通讯器上的联系人列表会显示缩写。

  2. 在按钮上显示文本的一部分,当鼠标悬停时,通过调整按钮或工具提示的大小来显示全文。

  3. 在窗体上添加一些空间,当将鼠标悬停在窗体上的任何按钮上时,它们将显示全文。因此,表单上的通用标签会在鼠标悬停在任何按钮上时显示完整的按钮文本。

  4. 如果文本是固定的/静态的,则在按钮上引入一些图标代替文本,并在工具提示中显示全文。

〜Nilesh

答案 1 :(得分:0)

如果您确实要调整字体大小,则可以尝试检测文本何时到达按钮的边界,然后减小字体大小。这是一些入门的代码,但是我不确定如何根据按钮的宽度确定文本开始换行的长度。也许还有其他我找不到的财产。

// Get some info from the button control
var graphics = button1.CreateGraphics();
var font = button1.Font;
var textWidth = graphics.MeasureString(button1.Text, font).Width;

// Not sure what the magic formula is to determine when the word wraps
if (textWidth > button1.Width - 25)
{
    // Assign a new font based on the old one, but smaller
    button1.Font = new Font(font.FontFamily, font.Size - 1,
        font.Style, GraphicsUnit.Pixel);
}