将文本居中放在WinForms应用程序中的按钮上

时间:2013-01-23 15:34:25

标签: c# winforms

我有一个带有tabControl的简单Windows窗体应用程序。我在tabControl上有3个面板,每个面板有5个按钮。第一组按钮上的文本是硬编码的,但是当您从第一组中单击一个按钮时,下一组将填充,然后当您单击第二组中的一个按钮时,最后一组会再次发生相同的事情。在[Design]视图中,我手动将每个按钮的TextAlign属性设置为MiddleCenter。但是,当我运行应用程序时,中间按钮组上的文本永远不会居中。始终TopLeft对齐。每次我以编程方式设置按钮文本时,我都尝试更改字体大小甚至显式设置TextAlign属性,如下所示:

private void setButtons(List<string> labels, Button[] buttons)
    {
        for (int i = 0; i < buttons.Count(); i++)
        {
            if (i < labels.Count)
            {
                buttons[i].Text = labels.ElementAt(i);
                buttons[i].TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
                buttons[i].Enabled = true;
            }
            else
            {
                buttons[i].Text = "";
                buttons[i].Enabled = false;
            }
        }
    }

此图显示结果: alignment issue

有没有人对我缺少的东西有任何想法?

4 个答案:

答案 0 :(得分:4)

修剪您指定给按钮的文本。您也可以按索引引用标签,而无需调用ElementAt

private void setButtons(List<string> labels, Button[] buttons)
{
    for (int i = 0; i < buttons.Count(); i++)
    {
        Button button = buttons[i];

        if (i < labels.Count)
        {
            button.Text = labels[i].Trim(); // trim text here
            // button.TextAlign = ContentAlignment.MiddleCenter;
            button.Enabled = true;
        }
        else
        {
            button.Text = "";
            button.Enabled = false;
        }
    }
}

答案 1 :(得分:0)

SQL表中分配给中间列的字符串实际上是nchar(50),而不是nvarchar(50),这解释了问题。我将.Trim()添加到Text赋值中,现在看起来很棒。

答案 2 :(得分:0)

您可以使用属性菜单中的 TextAlign ,并将其设置为 MiddleCenter ...

如果这不起作用,则您的按钮文本大于实际按钮本身...您应该将字体大小重新缩放到较低的基本大小或百分比使用

实际按钮的大小
btnFunction.Font = new Font(btnFunction.Font.Name, Convert.ToInt32(btnFunction.Height * 0.3333333333333333));

这会导致按钮的字体为按钮高度的三分之一....

答案 3 :(得分:0)

您可以将UseCompatibleTextRendering属性设置为true,然后使用TextAlign属性。