我有自定义Control
:
public class Temp : Control
{
public Temp(Color col, int x, int y)
{
Size = new Size(x + 10, y + 10);
this.x = x;
this.y = y;
SetStyle(ControlStyles.SupportsTransparentBackColor, true);
BackColor = col;
}
int x, y;
protected override void OnPaint(PaintEventArgs e)
{
base.OnPaint(e);
using (var p = new Pen(Color.Black, 3))
{
e.Graphics.DrawLine(p, new Point(10, 10), new Point(x, y));
}
}
}
从我Load
的{{1}}事件中,我将其中两个控件添加到Form
的{{1}}中,我添加为我的表单的唯一控件:
Control
这是输出:
正如你可以看到第一个控件覆盖第二个控件,而我只想显示控制背景颜色透明的两行。
请注意,使用透明BackColor不起作用:
Panel
这是输出:
我该如何解决这个问题?也就是说,只显示(并且完全)我的两条线?
答案 0 :(得分:1)
而不是从Control继承,在自定义类中创建两个点。 示例代码如下所示
using System;
using System.Collections.Generic;
using System.Drawing;
using System.Windows.Forms;
namespace SOWinForm
{
public partial class Form1 : Form
{
List<Line> lines;
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
lines = new List<Line>();
lines.Add(new Line(){ StartPoint = new Point(10,10), EndPoint = new Point(10,100)});
lines.Add(new Line() { StartPoint = new Point(10, 10), EndPoint = new Point(50, 50) });
}
protected override void OnPaint(PaintEventArgs e)
{
foreach (var line in lines)
{
using (var p = new Pen(Color.Black, 3))
{
e.Graphics.DrawLine(p, line.StartPoint, line.EndPoint);
}
}
}
}
public class Line
{
public Point StartPoint {get;set;}
public Point EndPoint { get; set; }
//Add Custom Properties
}
}
答案 1 :(得分:1)
设置透明背景色并不意味着背景色是透明的而是 父级的颜色。第一个控件的父级是面板(灰色),因此控件的颜色也是灰色。将第一个控件的父级设置为第二个控件的父级。
瓦尔特