2014-09-23 45 views
0

您好我正在尝试按下按钮的效果,因此当mousenter移动2px图片框时,我使用图片框作为按钮,因为它允许我设置透明背景。 我试图强迫背景在各种事件(油漆,上层变更位置,更改位置后)透明,但没有成功。 我认为这是因为改变一个元素时重画的原因,因为出现了由图片框“隐藏”的背景的白色部分。在没有出现白色边框的情况下,鼠标中心上的图片框更改位置

任何想法如何解决?

在此先感谢

private void buttonX2_MouseLeave(object sender, EventArgs e) 
{ 
    ((PictureBox) sender).Location = new Point(
    ((PictureBox) sender).Location.X, ((PictureBox) sender).Location.Y - 2); 

} 


private void buttonX2_MouseEnter(object sender, EventArgs e) 
{ 
    ((PictureBox)sender).Location = new Point(
    ((PictureBox)sender).Location.X, ((PictureBox)sender).Location.Y + 2); 

} 

Nothing to see here

The Program View

+1

我不认为我能理解。那么buttonX2和button3 PictureBoxes?他们是一样的吗?一个错字?他们被某种东西覆盖了吗?通过什么方式?您是否真的想通过绘制旧背景来控制__透明度___只是__faked__,从_poudo-transparent_控件添加到其父对象的时间点开始? – TaW 2014-09-23 14:19:46

+0

有多个按钮,我更新名称以防止混淆,并添加了表单图像。 这个想法是在任何一个picturebox的mousenter中,位置改变为y + 2,并且当mouseleave y-2时,但是在重画时会出现白色。 我知道透明度是伪造的,这就是我认为出现白色边框的原因,因为必须重新绘制被图片框隐藏的图像部分,但也许是防止视觉问题的一些方法。 – 2014-09-23 14:30:57

+1

好吧,现在到底这些按钮下面到底是什么?表格?它的背景图像?这不应该受到周围移动控制的影响! – TaW 2014-09-23 14:55:30

回答

1

这个问题似乎来自于移动或退出过慢。如果你这样做,你会说从下面输入,但PB正在向上移动,所以你再次失去它,所以它下降,因此你又在等等。正确的重新绘制背景不能跟上这些'抖动对接盒'。

首先,正如汉斯指出的那样,让事情变得更加突兀:使表格的BackColor变暗,甚至可能是黑色!

其次,以避免抖动的问题,将鼠标光标移动本身几个像素与Pictureboxes,就像这样:

private void pictureBox1_MouseEnter(object sender, EventArgs e) 
{ 
    PictureBox PB = (PictureBox)sender; 
    Point MP = Cursor.Position; 
    this.SuspendLayout(); 
    PB.Location = new Point(PB.Location.X, PB.Location.Y - 2); 
    Cursor.Position = new Point(MP.X, MP.Y - 2); 
    this.ResumeLayout(); 

} 

private void pictureBox1_MouseLeave(object sender, EventArgs e) 
{ 
    PictureBox PB = (PictureBox)sender; 
    Point MP = Cursor.Position; 
    this.SuspendLayout(); 
    PB.Location = new Point(PB.Location.X, PB.Location.Y + 2); 
    Cursor.Position = new Point(MP.X, MP.Y + 2); 
    this.ResumeLayout(); 
} 
+0

设置黑色表格背景的部分添加到更改光标位置制作窍门。 谢谢 – 2014-09-23 18:37:16