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