救命啊,自定义控件Z-Index的问题,高分送上
风轻扬 2009-10-10 09:42:42 我写了一个自定义控件,是一个GDI+绘图生成的一个电子图章,继承自Control类,重写了OnPaint方法,在该方法中,我最后会调用一下BringToFront()方法,以便我的图章控件将来使用的时候不管是设计时还是运行时,都会在其他控件的前端,我还让图章透明了,用的是网上通用的以下代码
/// <summary>
/// 重写基类CreateParams属性
/// </summary>
protected override CreateParams CreateParams
{
get
{
CreateParams cp = base.CreateParams;
cp.ExStyle |= 0x00000020; //WS_EX_TRANSPARENT
return cp;
}
}
/// <summary>
/// 重写基类OnPaintBackground方法
/// 不写任何代码屏蔽基类绘制背景色的代码
/// </summary>
/// <param name="pevent"></param>
protected override void OnPaintBackground(PaintEventArgs pevent)
{
// 不绘制背景色
}
/// <summary>
/// 重写基类的OnPaint方法
/// </summary>
/// <param name="e"></param>
protected override void OnPaint(PaintEventArgs e)
{
......;
this.BringToFront();//每次控件重绘都会调用该方法至于最前端
}
前两个方法是让图章控件透明的,后一个OnPaint是绘制图章的过程。
下面是问题:
1.如果我在窗体上先放置一个微软的控件Button,然后放上我这个图章控件,没有任何问题,无论是设计时还是运行时,都是图章在前,按钮在后,而且透明效果也很好。
2.我再次写一个自定义控件,就是继承自UserControl的那种,将按钮放入那个自定义控件的面板,生成自定义控件,就是仅包含一个按钮的自定义控件。此时我将自定义控件放入窗体,将我的图章控件搭到上面,这时在设计时我点一下图章图章会处于最前端,而且透明,但是运行时自定义控件就会处于最前端,怎么处理都不行。
3.如果在窗体上先放一个Panel这样的容器控件,再放上一个图章,也会产生2中所述的问题,还有就是如果按钮的Size很大,图章只压了一部分按钮,此时图章范围的按钮并不可点,就是说其实图章已经在最前端了,而图章的透明将下面的Panel或2中的自定义控件给透明出来了,但是Panel或2中的控件并不透明,反过来从视觉上压住了图章。
4.微软的Button、Label等控件均没有此问题,就是说按钮在下,图章在上,没有任何问题。
是不是这回我这个图章控件需要处理什么东西没处理啊,郁闷啊?
各位大侠请出手,高分送上!