限制绘制事件处理程序
本文关键字:程序 事件处理 绘制 | 更新日期: 2023-09-27 18:17:31
我有一个带有油漆处理程序的滚动条用户控件,我想知道是否有一种方法来限制用户可以在滚动条上绘制的位置。例如,我只会让他们画在拇指滚动的背景上,而不是其他地方。
我当前的代码是这样的
public event PaintEventHandler paintEvent = null;
protected override void OnPaint(PaintEventArgs e)
{
//---------------other code------------------
if (this.paintEvent != null)
this.paintEvent(this, new PaintEventArgs(e.Graphics, new Rectangle(1, UpArrowImage.Height, this.Width - 2, (this.Height - DownArrowImage.Height - UpArrowImage.Height))));
//----------------other code------------------
}
其中矩形是我想让用户绘制的位置
在引发paintEvent
之前使用Graphics.SetClip(clipRectangle)方法,并在其之后调用ResetClip。如果你需要一个非矩形区域作为剪辑,你可以使用图形。剪辑财产。
你的代码变成:
protected override void OnPaint(PaintEventArgs e)
{
var tempEvent = this.paintEvent;//To avoid race
if (tempEvent != null)
{
e.Graphics.SetClip(clipRectangle);
try
{
tempEvent(this, new PaintEventArgs(e.Graphics, new Rectangle(1, UpArrowImage.Height, this.Width - 2, (this.Height - DownArrowImage.Height - UpArrowImage.Height))));
}
finally
{
e.Graphics.ResetClip();
}
}
}
通过这种方式,如果用户绘制超出指定的clipRectangle,它将被剪切而不绘制。
然而,如果用户聪明的话,他可以自己调用ResetClip
。所以你有风险