2015-02-08 2 views
0

Рассмотрим следующий пример. Это было сделано путем установки TransparencyKey свойства:DrawParentBackground/DrawThemeParentBackground на форме верхнего уровня

public Form() 
{ 
    this.InitializeComponent(); 
    this.BackColor = Color.Fuscia; 
    this.TransparencyKey = this.BackColor; 
} 

Example form

То, что я на самом деле хочу, чтобы быть в состоянии сделать это похоже на поведение функции DrawThemeParentBackground (удобно завернутые в .NET, как DrawParentBackground), однако, похоже, это не работает для форм верхнего уровня (только для контроля).

Я пытался использовать TransparencyKey поведение наряду с перекрывая OnPaint метод:

protected override void OnPaint(PaintEventArgs e) 
{ 
    base.OnPaint(e); 
    e.Graphics.FillRectangle(new SolidBrush(Color.FromArgb(128, 255, 0, 0)), this.ClientRectangle); 
} 

Результат:

Example

Вопрос:

Как могу ли я нарисовать содержимое под CustomerRectangle формы верхнего уровня?

ответ

1

Этот эффект вы хотите?

enter image description here

Если да, то вы можете использовать две различные формы. Вы делаете рисунок во втором.

public partial class Form1 : Form 
{ 
    private Form2 form2; 

    public Form1() 
    { 
     InitializeComponent(); 
     this.BackColor = Color.White; 
     this.TransparencyKey = Color.White; 
     this.StartPosition = FormStartPosition.Manual; 
     this.Location = new Point(200, 200); 
     form2 = new Form2(); 
     form2.StartPosition = this.StartPosition; 
     form2.Location = this.Location; 
     form2.Show(); 

     this.FormClosed += new FormClosedEventHandler(Form1_FormClosed); 
     this.LocationChanged += new EventHandler(Form1_LocationChanged); 
     this.SizeChanged += new EventHandler(Form1_SizeChanged); 
    } 

    void Form1_FormClosed(object sender, FormClosedEventArgs e) 
    { 
     form2.Close(); 
    } 

    void Form1_LocationChanged(object sender, EventArgs e) 
    { 
     form2.Location = this.Location; 
    } 

    void Form1_SizeChanged(object sender, EventArgs e) 
    { 
     form2.Size = this.Size; 
    } 
} 

и

public partial class Form2 : Form 
{ 
    public Form2() 
    { 
     InitializeComponent(); 
     ShowInTaskbar = false; 
     this.Opacity = 0.8; 
    } 

    protected override void OnPaint(PaintEventArgs e) 
    { 
     base.OnPaint(e); 
     e.Graphics.FillRectangle(new SolidBrush(Color.FromArgb(255, 0, 0)), this.ClientRectangle); 
    } 
}