Почему при перетаскивании я оставляю пустое пространство между изображениями на панели? - PullRequest
1 голос
/ 14 апреля 2019

Итак, я пытаюсь перетащить Picture Box на панель, которая работает, но как-то между ящиками есть свободное пространство, и я не понимаю, почему это происходит?

Ниже, нажав на картинку, вы сможете увидеть пример моей ситуации, а также код, который использует события на панели и в окне изображения - DragDrop, DragOver и MouseDown.

Пример

private void panelMap_DragOver(object sender, DragEventArgs e)
    {
        e.Effect = DragDropEffects.All;
    }

 private void pictureBox1_MouseDown(object sender, MouseEventArgs e)
    {
        if (!runningSimulation)
        {
            pictureBox1.DoDragDrop(pictureBox1.Image, DragDropEffects.Copy);
            dragTypeOne = true;
        }
    }` private void panelMap_DragDrop(object sender, DragEventArgs e)
    {
        Point cursor = PointToClient(Cursor.Position);
        Point drawPoint = new Point();

        //Finding out which cell the crossing is dropped on
        determineCell(e);
        drawPoint = map.Cells[selectedCell - 1].Location;

        //Moving the crossing
        if (e.Effect == DragDropEffects.Move)
        {
            foreach (Crossing cr in map.Crossings)
            {
                if (cr.Location == mouseDown && !map.Cells[selectedCell - 1].Taken)
                {
                    cr.Location = drawPoint;
                    // cr.Pb_Background.Location = drawPoint;
                    cr.Pb_Transparent.Location = drawPoint;
                    map.Cells[selectedCell - 1].Taken = true;
                    map.Cells[selectedCell - 1].Crossing = map.Cells[firstSelection - 1].Crossing;
                    map.Cells[firstSelection - 1].Taken = false;
                    map.Cells[firstSelection - 1].Crossing = null;
                    //grid.CheckNeighbours(selectedCell - 1);
                    for (int i = 0; i < map.Cells.Count; i++)
                    {
                        if (map.Cells[i].Taken)
                        {
                            map.CheckNeighbours(i);
                        }
                    }
                }
            }
        }
        else if (!map.Cells[selectedCell - 1].Taken)
        {
            map.Cells[selectedCell - 1].Taken = true;
            PictureBox pb_b = new PictureBox();
            pb_b.Height = panelMap.Height / 3;
            pb_b.Width = panelMap.Width / 4;
            pb_b.SizeMode = PictureBoxSizeMode.StretchImage;
            pb_b.BackColor = Color.Transparent;
            pb_b.MouseDown += new MouseEventHandler(Mouse_Down);
            pb_b.Image = (Image)e.Data.GetData(DataFormats.Bitmap);

            //Added transparent layer
            PictureBox pb_t = new PictureBox();
            pb_t.Size = pb_b.Size;
            pb_t.MouseDown += new MouseEventHandler(Mouse_Down);

            //Which crossing will be dragged
            if (dragTypeOne)
            {
                System.Drawing.Graphics formGraphics = this.CreateGraphics();
                Cross_Shaped cr = new Cross_Shaped(drawPoint, pb_b, pb_t);
                pb_b.Location = cr.Location;
                pb_b.Tag = cr;
                pb_t.Tag = cr;
                map.AddCrossing(cr);
                map.Cells[selectedCell - 1].Crossing = cr;

                pb_b.Image = CTF.Properties.Resources.crossing;
            }

            this.Controls.Add(pb_b);
            this.Controls.Add(pb_t);


            pb_t.BringToFront();


            pb_b.Location = drawPoint;

            pb_b.Parent = panelMap;
            pb_t.Parent = pb_b;
            map.CheckNeighbours(selectedCell - 1);
        }
    }`
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...