2013-02-21 3 views
0

Это очень странно. Когда я делаю это на событии краски на моей кнопке:Текст кнопки исчезает после выполнения события краски

using (LinearGradientBrush brush = new LinearGradientBrush(button1.ClientRectangle, 
                   Color.Orange, 
                   Color.Red, 
                   90F)) 
{ 
    e.Graphics.FillRectangle(brush, this.ClientRectangle); 
} 

текст кнопки исчезает. Как я могу вернуть текст?

ответ

2

Вы в основном рисуете верхнюю часть элемента управления. Вы должны попробовать подклассифицировать кнопку и переопределить OnPaintBackground, чтобы закрасить текст.

0

Почему бы не установить фоновая кисть кнопки?

+0

Насколько я помню, вы не можете просто так делать с Windows Forms. – Andrey

+0

Хорошо, думал, что это WPF извините – Benny

0
  1. Звоните button1.Invalidate(). Это будет перерисовывать текст ... и целую кнопку.
  2. Предыдущий совет может дать не то, что вы хотите. Поскольку вы решили нарисовать кнопку самостоятельно, вы также несете ответственность за рисование текста поверх фона, см. DrawString.
0

Если вы не хотите использовать фоновую свойство или переопределить OnPaintBackground метод, вы можете сделать следующее:

// Ваш фон картины код

public void DrawText(Graphics g, Rectangle bounds, string text, Font font, Brush brush) 
{ 
    float x = bounds.Width/2; 
    float y = bounds.Height /2; 

    SizeF textSize = g.MeasureString(text, font); 

    x = (x - (textSize.Width/2) + bounds.X); 
    y = (x - (textSize.Height/2) + bounds.Y); 

    g.DrawString(text, font, brush, new PointF(x, y)); 
} 

и использовать его как так

DrawText(g, button1.ClientRectangle, button1.Text, button1.Font, new SolidBrush(button1.ForeColor)); 

Ничего из этого не тестировал хотя оооочень yeaaaa ....

EDIT: Если вы решите пойти по этому маршруту, вам нужно иметь в виду, что при изменении размера элемента управления требуется перерисовка элемента управления.

Смежные вопросы