0

チェステーブルがあり、要素がルールに従って移動しています。しかし、ルールからドラッグすると、ボタンが消えます...どうすれば解決できますか??? (赤いボタンは、要素をどこに移動できるかを示しています) たとえば、ナイトは現在、ルールに従って移動しています (赤いボタンを通過しなければ問題はありません) が、赤い場所を通過し、そこにドロップすると、騎士が消え、赤い場所は元の色に戻ります (騎士が行ける場所を示す赤い場所はもうありません)。私はデバッグを試みましたが、私は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;
        }
        }
4

1 に答える 1

0

DoDragDropは、実際にピースをドロップするときにのみ呼び出されます。DoDragDropを呼び出す前に、MouseDownまたはMouseMoveでドラッグを開始するときに、ピースをドロップできる場所を決定するためのロジックを実行する必要があります。また、DragEnter関数の赤いボタンをクリアしているようです。これは、DoDragDropを呼び出した後、MouseDown/MouseMove関数でも実行する必要があります。

于 2012-07-03T14:41:01.017 に答える