C#winform中放有多个picturebox控件,如何让称动一个时,其它的不动?
在一个窗口里,加入了多个picturebox控件,如picture1,picture2,当我拖动picture1时,在没有经过picture2时,正常的,也就是只有picture1动,可当我将其拖动到picture2上面时,picture2就跟着一起动了,反过来拖picture2时也一样,当经过picture1时,二个也一起动了,请问如何才能让其经过时,只动拖动的那个,另一个不动呀,请高手指点..
在线等,多谢谢了,最好给点源代码提示....解决马上结帖给分...
[解决办法]
isStart要定义两个变量
IsPicture1Start, IsPicture2Start分别记录Picture1和Picture2移动
就可以了
[解决办法]
- C# code
bool isStart1,isStart2; int mx, my, cx, cy; //以下三个方法为picture1的移动方法 private void picture1_MouseDown(object sender, MouseEventArgs e) { if (e.Button == MouseButtons.Left) { isStart1 = true; mx = e.X; my = e.Y; } } private void picture1_MouseMove(object sender, MouseEventArgs e) { if (isStart1) { cx = picture1.Left - mx + e.X; cy = picture1.Top - my + e.Y; picture1.Left = cx; picture1.Top = cy; } } private void picture1_MouseUp(object sender, MouseEventArgs e) { isStart1 = false; } //以下三个方法为picture2的移动方法 private void picture2_MouseDown(object sender, MouseEventArgs e) { if (e.Button == MouseButtons.Left) { isStart2 = true; mx = e.X; my = e.Y; } } private void picture2_MouseMove(object sender, MouseEventArgs e) { if (isStart2) { cx = picture2.Left - mx + e.X; cy = picture2.Top - my + e.Y; picture2.Left = cx; picture2.Top = cy; } } private void picture2_MouseUp(object sender, MouseEventArgs e) { isStart2 = false; }
[解决办法]
设一个bool[] b=new bool[pictureBox的数量];
都为false
当MouseDown时.将b[pictureBox对应的 ]=true;
当MouseUp时 将 b[pivturebox对应的]=false;
MouseMove事件中,判断其对应的 变量是true才动, 是false就不动.
[解决办法]
你把mx,my,cx,cy也定义两个就ok了
- C# code
bool isStart1,isStart2; int mx1, my1, cx1, cy1; int mx2, my2 cx2, cy2; //以下三个方法为picture1的移动方法 private void picture1_MouseDown(object sender, MouseEventArgs e) { if (e.Button == MouseButtons.Left) { isStart1 = true; mx1 = e.X; my1 = e.Y; } } private void picture1_MouseMove(object sender, MouseEventArgs e) { if (isStart1) { cx1 = picture1.Left - mx1 + e.X; cy1 = picture1.Top - my1 + e.Y; picture1.Left = cx1; picture1.Top = cy1; } } private void picture1_MouseUp(object sender, MouseEventArgs e) { isStart1 = false; } //以下三个方法为picture2的移动方法 private void picture2_MouseDown(object sender, MouseEventArgs e) { if (e.Button == MouseButtons.Left) { isStart2 = true; mx2 = e.X; my2 = e.Y; } } private void picture2_MouseMove(object sender, MouseEventArgs e) { if (isStart2) { cx2 = picture2.Left - mx2 + e.X; cy2 = picture2.Top - my2 + e.Y; picture2.Left = cx2; picture2.Top = cy2; } } private void picture2_MouseUp(object sender, MouseEventArgs e) { isStart2 = false; }
[解决办法]
楼主事件绑定是手写的还是系统自动生成的
该不是绑定是指定错了..
pictureBox1.MouseDown += new MouseEventHandler(pictureBox1_MouseDown);
pictureBox2.MouseDown += new MouseEventHandler(pictureBox1_MouseDown);
好想也不太可能..
[解决办法]
写一个Class继承PictureBox
重写MouseDown,MouseMove,MouseUp
把你的代码填进去,变量定义在这个Class里。
然后用这个Class替代原来的picture,窗口里就不用写代码了,而且不会乱跑
[解决办法]
isStart 改成isStart1 isStart2 分别控制两个图形框
[解决办法]
仔细检查一下程序里,是不是还有其它的鼠标事件,看了下楼主的程序,自己也运行了一下9楼的程序,没什么问题呀,是不是有其它的事件弄着了,仔细查查吧.
[解决办法]
[解决办法]
//多定义一个变量
bool IsStartMoving=false;
bool isStart;
int mx, my, cx, cy;
//以下三个方法为picture1的移动方法
private void picture1_MouseDown(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Left)
{
isStart = true;
mx = e.X;
my = e.Y;
}
}
private void picture1_MouseMove(object sender, MouseEventArgs e)
{
if (!IsStartMoving && isStart)
{
IsStartMoving=true;
cx = picture1.Left - mx + e.X;
cy = picture1.Top - my + e.Y;
picture1.Left = cx;
picture1.Top = cy;
}
}
private void picture1_MouseUp(object sender, MouseEventArgs e)
{
isStart = false;
IsStartMoving=false;
}
//以下三个方法为picture2的移动方法
private void picture2_MouseDown(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Left)
{
isStart = true;
mx = e.X;
my = e.Y;
}
}
private void picture2_MouseMove(object sender, MouseEventArgs e)
{
if (!IsStartMoving &&isStart)
{
IsStartMoving =true;
cx = picture2.Left - mx + e.X;
cy = picture2.Top - my + e.Y;
picture2.Left = cx;
picture2.Top = cy;
}
}
private void picture2_MouseUp(object sender, MouseEventArgs e)
{
IsStartMoving =false;
isStart = false;
}