带有旧文本的C#windows表单重绘按钮

时间:2015-11-12 18:51:50

标签: c# forms colors controls

我整个上午一直在寻找解决方案,但仍无法弄清楚,所以这似乎是一个重复的问题,但事实并非如此。

我正在Visual Studio Pro 2015中编写一个Windows窗体应用程序,它有大约40个带有平面样式的按钮。按钮forecolor应该是白色的,但是当表单打开时大多数都被禁用,因此它们显示黑色文本。在今天早上研究了一些后,我发现我需要重新绘制按钮以使文本颜色正确...当你为每个按钮单独更改它时效果很好。以下是我使用的代码:

    private void someButton_Paint(object sender, PaintEventArgs e)
    {
        Button btn = (Button)sender;
        // make sure Text is not also written on button
        btn.Text = string.Empty;
        // set flags to center text on button
        TextFormatFlags flags = TextFormatFlags.HorizontalCenter | TextFormatFlags.VerticalCenter | TextFormatFlags.WordBreak;   // center the text
        // render the text onto the button
        TextRenderer.DrawText(e.Graphics, "SomeButtonText", btn.Font, e.ClipRectangle, System.Drawing.Color.White, flags);
    }

我不想为每一个按钮都这样做。它看起来很混乱,似乎我应该能够编写一个通用版本,将所有按钮的绘制事件设置为单个方法,让它成为所有这些的画家。这大部分也有效,但有一个小故障:我想把每个按钮的文字设置为和画前一样,但无论我尝试过什么我都可以'似乎让这个工作。文本只是设置为空字符串。以下是我用于此的代码:

    private void allButtons_Paint(object sender, PaintEventArgs e)
    {
        Button btn = (Button)sender;

        string str = btn.Text; // This is the simplest way I've tried to get the button text

        // make sure Text is not also written on button
        btn.Text = string.Empty;
        // set flags to center text on button
        TextFormatFlags flags = TextFormatFlags.HorizontalCenter | TextFormatFlags.VerticalCenter | TextFormatFlags.WordBreak;   // center the text
        // render the text onto the button
        TextRenderer.DrawText(e.Graphics, str, btn.Font, e.ClipRectangle, System.Drawing.Color.White, flags);
    }

有人知道如何使这项工作?我知道我可能只是在这一点上为每个按钮实现了这个方法但是我真的想要这种方式工作,因为它让我觉得看起来很简单的东西给了我这么多麻烦。

0 个答案:

没有答案