【发布时间】:2014-04-07 14:59:35
【问题描述】:
我试图加载一些矩形作为表单的“层”,我也加载了一个图像作为表单的一个层,但是这些矩形的问题是它们“覆盖”了图像,擦除了它的一部分,我希望它们被视为图像的框以显示信息,并且我还希望能够将一个矩形覆盖到另一个矩形上而不会相互擦除。
这里是矩形的类
namespace Imagen_capas
{
class rectangulotransp : UserControl
{
public Pen pen11;
private Rectangle Myrectangle;
public rectangulotransp(int x,int y,int alto, int ancho, Rectangle tamacontrol)
{
Size = tamacontrol.Size;
Location = tamacontrol.Location;
SetStyle(ControlStyles.SupportsTransparentBackColor, true);
BackColor = Color.Transparent;
Myrectangle = new Rectangle(x, y, alto, ancho);
pen11 = nuevopen();
}
private Pen nuevopen()
{
Pen mypen1 = new Pen(Color.Red);
return mypen1;
}
protected override void OnPaint(PaintEventArgs e)
{
Graphics g = e.Graphics;
g.DrawRectangle(pen11,Myrectangle);
base.OnPaint(e);
}
}
}
以及表单的代码
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading;
using System.Windows.Forms;
namespace Imagen_capas
{
public partial class Form1 : Form
{
rectangulotransp rect;
rectangulotransp rect2;
public Form1()
{
InitializeComponent();
rect = new rectangulotransp(50, 14, 500, 100,new Rectangle(0,0,Width+400,Height));
// this.Controls.Add(rect);
rect2 = new rectangulotransp(0, 50, 20, 100,new Rectangle(20,50,Width,Height));
this.Controls.Add(rect2);
this.Controls.Add(rect);
}
private void Form1_Load(object sender, EventArgs e)
{
}
}
【问题讨论】:
-
AFAIK 用户控件不支持透明度。您可以将矩形类更改为非控制类,并在疼痛事件中透明地绘制它们。
-
WinForms 不会那样分层。透明背景只是调用父背景来绘制它,而不是它下面的控件。解决方案是根本不使用控件,只需创建一个保存矩形信息的类并在容器的绘制事件中绘制这些对象。
标签: c# layer rectangles