2016-08-18 3 views
0

Я хочу сделать что-то вродекак сделать градиент формы фона ребенка с #

enter image description here

Это бар с нанизать на него, и этот бар является ребенок Exe игра

я сделал ребенок-родитель вещь, но я не могу сделать дизайн этого бара правильного

Я попытался это:

private void label1_Paint(object sender, PaintEventArgs e) 
    { 
     Rectangle rec = new Rectangle(label1.Location.X, label1.Location.Y, label1.Width/3, label1.Height); 
     using (LinearGradientBrush brush = new LinearGradientBrush(rec, Color.Transparent, Color.Blue, 45F)) 
     { 
      e.Graphics.FillRectangle(brush, rec); 
     } 

     Rectangle rec3 = new Rectangle(label1.Width/3 - 1, label1.Location.Y, label1.Width/3, label1.Height); 
     using (LinearGradientBrush brush = new LinearGradientBrush(rec3, Color.Blue, Color.Blue, 45F)) 
     { 
      e.Graphics.FillRectangle(brush, rec3); 
     } 

     Rectangle rec2 = new Rectangle(2 * label1.Width/3 - 1, label1.Location.Y, label1.Width/3, label1.Height); 
     using (LinearGradientBrush brush = new LinearGradientBrush(rec2, Color.Blue, Color.Transparent, -45F)) 
     { 
      e.Graphics.FillRectangle(brush, rec2); 
     } 

     Font font = new Font("Tahoma", 10f, FontStyle.Bold); 
     LinearGradientBrush brush2 = new LinearGradientBrush(new Rectangle(0, 0, Width, Height + 5), Color.White, Color.White, LinearGradientMode.Vertical); 
     e.Graphics.DrawString("Hello", font, brush2, label1.Width/2, label1.Height/2); 
    } 

другой способ:

private void button2_Click(object sender, EventArgs e) 
    { 
     Graphics g = label1.CreateGraphics(); 
     Pen p = new Pen(Brushes.Orange); 
     Point p1 = Point.Empty; 
     Point p2 = Point.Empty; 
     int x_start = label1.Width/2, y_start = label1.Location.Y; 
     int x_size = label1.Width, y_size = 35; 
     double increment = 0; 
     double current = 255; 

     p1.Y = y_start; 
     p2.Y = y_size; 
     increment = 255/(double)x_size; 

     for (int i = x_start; i < x_start + x_size; i++) 
     { 
      p1.X = i; 
      p2.X = i; 
      g.DrawLine(p, p1, p2); 
      p.Color = Color.FromArgb((int)current, p.Color); 
      current -= increment; 
     } 

     current = 255; 

     for (int j = x_start; j >= label1.Location.X; j--) 
     { 
      p1.X = j; 
      p2.X = j; 
      g.DrawLine(p, p1, p2); 
      p.Color = Color.FromArgb((int)current, p.Color); 
      current -= increment; 
     } 

     Font font = new Font("Tahoma", 10f, FontStyle.Regular); 
     LinearGradientBrush brush = new LinearGradientBrush(new Rectangle(label1.Location.X, label1.Location.Y, label1.Width, label1.Height), Color.White, Color.White, LinearGradientMode.Horizontal); 

     using (StringFormat string_format = new StringFormat()) 
     { 
      string_format.Alignment = StringAlignment.Center; 
      string_format.LineAlignment = StringAlignment.Center; 
      g.DrawString("Hello", font, brush, label1.ClientSize.Width/2, label1.ClientSize.Height/2, string_format); 
     } 
    } 
+0

отказано в доступе по ссылке изображения, вы можете проверить или добавить изображение здесь? –

+0

@ LP.Gonçalves Я только что изменил ссылку –

+0

Я до сих пор не вижу изображения. Также: что такое «пар»? Опечатка с собственным тегом ??? – TaW

ответ

0

Вот пример Label label1вложенной в Label label2 с изображения:

enter image description here

private void label1_Paint(object sender, PaintEventArgs e) 
{ 
    Rectangle rec = e.ClipRectangle; 

    using (LinearGradientBrush brush = 
     new LinearGradientBrush(rec, Color.Transparent, Color.Blue, 0f)) 
    { 

     ColorBlend cblend = new ColorBlend(4); 
     cblend.Colors = new Color[4] { Color.Transparent, Color.DarkSlateGray, 
             Color.DarkSlateGray, Color.Transparent }; 
     cblend.Positions = new float[4] { 0f, 0.15f, 0.85f, 1f }; 
     brush.InterpolationColors = cblend; 
     e.Graphics.FillRectangle(brush, rec); 
    } 

    Font font = new Font("Tahoma", 10f, FontStyle.Bold); 
    TextFormatFlags fmt = new TextFormatFlags(); 
    fmt = TextFormatFlags.VerticalCenter | TextFormatFlags.HorizontalCenter; 

    TextRenderer.DrawText(e.Graphics, "Hello", font, rec, 
          Color.White, Color.Transparent, fmt); 

} 

Обратите внимание, что я использовал центральный цвет дважды, поэтому я мог установить его позиции на как заканчивается вблизи краев. И что два цвета в конструировании LinearGradientBrush's никогда не используются.

Также обратите внимание, как я использую флаги формата для центра текст без каких-либо дополнительных усилий ..

+0

это почти хорошо, но он показывает белый, а не прозрачный с боков, Я надел его на бланк формы вместо ярлыка, потому что я этого не хотел кричать Я делаю что-то для заднего цвета и прозрачного ключа формы? также я хочу это полупрозрачность , когда я уменьшаю непрозрачность, которую он не показывает в родительском exe –

+0

_i не хотел, чтобы он кричал. Я делаю что-то для заднего цвета и прозрачного ключа формы? также я хочу, чтобы он был полупрозрачным, когда я уменьшаю непрозрачность, которую он не показывает в родительском exe_ Извините, но я этого не понимаю. Значит, больше нет ярлыков? Имеет ли форма BackgroundImage? Где вы уменьшаете непрозрачность? В виде? – TaW

+0

больше нет метки весь код находится в форме, я взял ваш код и поместил его в краску. Во-вторых, форма не имеет фонового изображения, и мне нужно уменьшить непрозрачность в самой форме, чтобы она была полупрозрачной на родительском объекте, который является exe игры. –