如何为用户提供一致地绘制带有附加控件的自定义控件的可能性

How to offer the user the possibility to paint consistently a custom control with additional controls on it

为简单起见,我们假设有一个带有完全个性化图形的自定义控件,并且还包含一个面板(图片中带有黑色细边框):

现在,自定义控件应该为用户提供进一步个性化的机制。例如,假设用户需要在其上绘制红色垂直线(见图)。该线部分在用户控件背景上,部分在面板上。就像现在一样,通过使用 control_paint 事件,用户最终将在面板下方绘画。

在类似情况下,您有什么建议可以让用户的生活更轻松?

编辑

面板只是一个例子。取而代之的是我有两个其他控件(例如一个是标尺,它根据各种参数绘制标签和刻度),其逻辑非常复杂。

您可以创建一个透明控件,并将透明控件放在其他控件之上以进行绘图,并在不需要时将其隐藏。

这里是透明控件的代码和简单的一行,然后你可以把需要的绘制逻辑放在OnMouseMove和OnMouseDown和OnMouseUp中,然后绘制你需要的东西,就像我在OnPaint中所做的那样:

using System.Drawing;
using System.Windows.Forms;
public class TransparentControl : Control
{
    public TransparentControl()
    {
        SetStyle(ControlStyles.AllPaintingInWmPaint | ControlStyles.SupportsTransparentBackColor, true);
    }
    protected override void OnPaintBackground(PaintEventArgs e)
    {
    }
    protected override void OnPaint(PaintEventArgs e)
    {
        e.Graphics.DrawLine(Pens.Red, 0, 0, Width, Height);
    }
    protected override CreateParams CreateParams
    {
        get
        {
            CreateParams cp = base.CreateParams;
            cp.ExStyle |= 0x20;
            return cp;
        }
    }
}