Cześć, testuję technologię drag and drop w TableLayoutPanel, gdzie elementami w tabeli są PictureBox (docelowo mam zamiar napisać warcaby w ten sposób).
Przykładowo tabela posiada dwie kolumny i dwa wiersze, każda komórka o rozmiarze 100 x 100.
Implementacja zdarzeń wygląda następująco
private void pictureBox1_MouseDown(object sender, MouseEventArgs e)
{
this.pictureBox1.DoDragDrop(this.pictureBox1, DragDropEffects.Move);
}
private void tableLayoutPanel1_DragDrop(object sender, DragEventArgs e)
{
PictureBox newPic = e.Data.GetData(typeof(PictureBox)) as PictureBox;
Point loc = this.tableLayoutPanel1.PointToClient(new Point(e.X, e.Y));
int x = (int)loc.X / 100;
int y = (int)loc.Y / 100;
this.tableLayoutPanel1.Controls.Add(newPic, x, y);
}
private void tableLayoutPanel1_DragEnter(object sender, DragEventArgs e)
{
e.Effect = DragDropEffects.Move;
}
Jednakże po uruchomieniu, tabela zachowuje się jakby była rozmiarów 150 x 150, np. w skrajnym przypadku (patrz załącznik), wartość "loc.X" powinna wynosić 200, jednakże wynosi 150. Żeby dragdrop działał poprawnie trzeba zmodyfikować dwie linijki:
int x = (int)loc.X / 75;
int y = (int)loc.Y / 75;
Gdzie tu sens i logika, skoro mam ustawione rozmiary komórek na 100 x 100, a cały rozmiar tabeli na 200 x 200?