###前提・実現したいこと
C#にてスライドパズルを作成するため、Windows Formの上に画像を張り付けたボタンを置き、クリックイベントで並びを変えるプログラムを作成しています
###発生している問題・エラーメッセージ
現在、同じボタンを二回押すと配列内では並び替えがうまくいくんですが、Form上のボタンが移動しなかったり 一つ隣のボタンが移動してしまうなど意図しない挙動が起きてしまいます。
###該当のソースコード
static void bt1_Click(object sender, EventArgs e) { //押下したボタン(画像)の座標(左上基準) btx = Cursor.Position.X - mf.Location.X; if (btx < 105) { btx = 0; } else if (btx < 205) { btx = 100; } else if (btx < 305) { btx = 200; } else if (btx < 405) { btx = 300; } bty = Cursor.Position.Y - mf.Location.Y; if (bty < 120) { bty = 0; } else if (bty < 220) { bty = 100; } else if (bty < 320) { bty = 200; } else if (bty < 420) { bty = 300; } lx = btx / 100; ly = bty / 100; for (int i = 0; i < 4; i++) { for (int j = 0; j < 4; j++) { //空白ピースの座標(左上基準) if (hit[i, j] == -1) { x = j * 100; y = i * 100; } } } //ボタン(画像)の移動 if (bty == y) { if ((btx - x) == 100) { bt1[ly, lx].Left = btx - 100; //ボタン(画像)の移動 tmp = hit[(bty / 100), (btx / 100)]; hit[(bty / 100), (btx / 100)] = -1; //空白の移動(配列内) hit[(y / 100), (x / 100)] = tmp; } else if((x - btx) == 100) { bt1[ly, lx].Left = btx + 100; //ボタン(画像)の移動 tmp = hit[(bty / 100), (btx / 100)]; hit[(bty / 100), (btx / 100)] = -1; //空白の移動(配列内) hit[(y / 100), (x / 100)] = tmp; } } else if (btx == x) { if ((bty - y) == 100) { bt1[ly, lx].Top = bty - 100; //ボタン(画像)の移動 tmp = hit[(bty / 100), (btx / 100)]; hit[(bty / 100), (btx / 100)] = -1; //空白の移動(配列内) hit[(y / 100), (x / 100)] = tmp; } else if((y - bty) == 100) { bt1[ly, lx].Top = bty + 100; //ボタン(画像)の移動 tmp = hit[(bty / 100), (btx / 100)]; hit[(bty / 100), (btx / 100)] = -1; //空白の移動(配列内) hit[(y / 100), (x / 100)] = tmp; } } mf.Visible = true; //画面(フォーム)の更新 }
###補足情報(言語/FW/ツール等のバージョンなど)
言語はC#、ツールはVisualStudio2015を使っています