체스 테이블이 있고 규칙에 따라 요소가 움직이고 있습니다. 그러나 규칙에서 드래그하면 버튼이 사라집니다 ... 어떻게 해결할 수 있습니까 ??? (빨간 버튼은 내 요소를 이동할 수있는 위치를 표시합니다) 예를 들어 기사가 규칙으로 이동 중입니다 (빨간색 버튼을 넘겨주지 않으면 아무런 문제가 없습니다). 그러나 빨간색 장소를 지나칠 때 드롭합니다. 거기에 기사가 사라지고 붉은 색의 장소가 원래 색으로 바뀝니다. (기사가있는 곳을 가리키는 빨간 장소가 없습니다.) 나는 디버그를 만들려고했지만, C#과 디버깅에서 나는 문제가 해결되지 않았기 때문에 새로운 것이다. 나는 내 길을 밝혀 주면 행복 할거야. 내가 어떻게 해결할 수 있니? 감사합니다체스 테이블에 문제 끌기
void btn_DragEnter(object sender, DragEventArgs e)
{
Button button = (Button)sender;
e.Effect = DragDropEffects.Move;
for (int x = 0; x <= 7; x++)
{
for (int y = 0; y <= 7; y++)
{
btn[x, y].Image = null;
if ((x + y) % 2 == 0)
btn[x, y].BackColor = Color.Black;
else
btn[x, y].BackColor = Color.White;
}
}
}
void btn_DragDrop(object sender, DragEventArgs e)
{
Button button = (Button)sender;
button.Image = (Bitmap)e.Data.GetData(DataFormats.Bitmap);
int[] dizi = (int[])button.Tag;
int x = dizi[0];
int y = dizi[1];
for (int a = 0; a <= 7; a++)
{
for (int b = 0; b <= 7; b++)
{
btn[a, b].AllowDrop = false;
}
}
if ((x + 1 >= 0 && y + 2 <= 7) && (y + 2 >= 0 && x + 1 <= 7))
{
btn[x + 1, y + 2].BackColor = Color.Red;
btn[x + 1, y + 2].AllowDrop = true;
}
if ((x + 1 >= 0 && y - 2 <= 7) && (y - 2 >= 0 && x + 1 <= 7))
{
btn[x + 1, y - 2].BackColor = Color.Red;
btn[x + 1, y - 2].AllowDrop = true;
}
if ((x - 1 >= 0 && y + 2 <= 7) && (y + 2 >= 0 && x - 1 <= 7))
{
btn[x - 1, y + 2].BackColor = Color.Red;
btn[x - 1, y + 2].AllowDrop = true;
}
if ((x - 1 >= 0 && y - 2 <= 7) && (y - 2 >= 0 && x - 1 <= 7))
{
btn[x - 1, y - 2].BackColor = Color.Red;
btn[x - 1, y - 2].AllowDrop = true;
}
if ((x + 2 >= 0 && y + 1 <= 7) && (y + 1 >= 0 && x + 2 <= 7))
{
btn[x + 2, y + 1].BackColor = Color.Red;
btn[x + 2, y + 1].AllowDrop = true;
}
if ((x + 2 >= 0 && y - 1 <= 7) && (y - 1 >= 0 && x + 2 <= 7))
{
btn[x + 2, y - 1].BackColor = Color.Red;
btn[x + 2, y - 1].AllowDrop = true;
}
if ((x - 2 >= 0 && y + 1 <= 7) && (y + 1 >= 0 && x - 2 <= 7))
{
btn[x - 2, y + 1].BackColor = Color.Red;
btn[x - 2, y + 1].AllowDrop = true;
}
if ((x - 2 >= 0 && y - 1 <= 7) && (y - 1 >= 0 && x - 2 <= 7))
{
btn[x - 2, y - 1].BackColor = Color.Red;
btn[x - 2, y - 1].AllowDrop = true;
}
}
감사합니다. 알렉스 덕분에 도움이되었습니다. 당신 DragEnter로 맞습니다. 그래서 나는 DragEnter에서 for 루프를 지웠다. 괜찮 았지만 이번에는 움직 인 기사를 움직이면 나이트의 이미지는 이전 위치에 머물러 있습니다. (기사를 움직일 때마다 기사의 이전 이미지가 유지 될 때마다 의미합니다.) –
DragEnter에서 for 루프를 지우는 대신 DragDrop의 끝으로 이동하거나 DoDragDrop 호출 후 배치하십시오. – AlexDev
감사합니다. Alex 나는 당신에게 많은 것을 감사했습니다. 그것은 문제를 해결했습니다. mousedown 이벤트에서 button.DoDragDrop .... statement 버튼 backcolar가 빨간색인지 확인한 다음 버튼 이미지를 null로 지정했습니다. 그렇지 않으면 나이트 이미지를 버튼 이미지에 할당했습니다. –