Picturebox更改位于mouseenter上的位置,不会出现白色边框

时间:2014-09-23 14:05:42

标签: c# winforms

您好我试图按下按钮的效果,所以当鼠标移动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 个答案:

答案 0 :(得分:1)

问题似乎来自进出太慢。如果你这样做,你会说从下面进入,但是PB正在向上移动,所以你再次离开它,所以它向下移动,因此你再次进入它等等。正确重新绘制背景不能跟上这些'抖动的ButtBoxes'..

首先,正如汉斯所指出的那样,让事情变得不那么突兀了:让表格的BackColor变暗,甚至是黑色!

其次要避免抖动问题,请使用Picturebox将鼠标光标本身移动几个像素,如下所示:

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();
}