In a project, you need to set a custom (draw arrow) control to a transparent color, so that when the control is superimposed, the line can be completely displayed, Baidu to the following articles, test, the effect meets the requirements.
C # custom control background color transparent method to convert from: http://www.cnblogs.com/crid/archive/2009/05/24/1488495.html
I struggled for ages with the problem of having controls show through a control that was painted on top of them. it seems that controlstyles. supportstransparentbackcolor just allowed the control to pick up the container's background color/image and wouldn't prevent the control from hiding any controls that were underneath it. I eventually found an answer so I thought I wocould post it here. this code example of a pointer class, will take an alpha-blended PNG in the constructor and allow all the controls behind it to show through the transparent or semi-transparent pixels in the PNG, even when the pointer's location is changed...
public class Pointer : Control{ public Pointer(Image image) : base() { Image = image; SetStyle(ControlStyles.SupportsTransparentBackColor | ControlStyles.UserPaint | ControlStyles.AllPaintingInWmPaint | ControlStyles.Opaque, true); BackColor = Color.Transparent; } protected override void OnLocationChanged(EventArgs e) { // pick up the container's surface again. Visible = false; Visible = true; } protected override CreateParams CreateParams { get { CreateParams cp = base.CreateParams; cp.ExStyle |= 0x00000020; //WS_EX_TRANSPARENT return cp; } } private Image image; public Image Image { get { return image; } set { image = value; Size = image.Size; } } protected override void OnPaint(PaintEventArgs pe) { base.OnPaint(pe); pe.Graphics.DrawImage(image, 0, 0); }}