如何为用户提供一致地绘制带有附加控件的自定义控件的可能性
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;
}
}
}
为简单起见,我们假设有一个带有完全个性化图形的自定义控件,并且还包含一个面板(图片中带有黑色细边框):
现在,自定义控件应该为用户提供进一步个性化的机制。例如,假设用户需要在其上绘制红色垂直线(见图)。该线部分在用户控件背景上,部分在面板上。就像现在一样,通过使用 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;
}
}
}