2010-02-24 47 views
-2

我想在面板中拖放圖像,並希望避免圖像重疊。圖像從另一個面板拖動,我想從該圖像構建佈局。我能夠將圖像拖放到面板上,並且在丟棄時要避免重疊。如何在C#中拖放時無效重疊2個圖像?

private void panel1_DragDrop(object sender,DragEventArgs e) // this.Cursor = Cursors.SizeAll;

 Control c = e.Data.GetData(e.Data.GetFormats()[0]) as Control; 
     if (c != null) 
     { 
      mycontrol = c; 


       c.Location = this.panel1.PointToClient((new Point(e.X, e.Y))); 

       this.panel1.Controls.Add(c); 

     } 

    } 

e.X和e.Y不能在面板上的其他控件上撒謊。

我該怎麼做?請給我一個合適的解決方案。

謝謝。

+3

@C。Karunarathne - Stackoverflow用戶希望人們至少做一些工作並展示它。如果您不提供某些內容並解釋哪些內容無效,則沒有人會迴應代碼請求。 – Oded 2010-02-24 09:39:01

+0

@C。 Karunarathne,即使你不知道如何開始編碼,你可以提供更多的信息。例如。在哪裏放置圖像?從文件或從另一個Winform中的圖像控件?你有什麼具體要求?例如。如果拖動的圖像比目標面板大,預期的行爲是什麼。 – 2010-02-24 09:43:01

回答

0

有2個解釋你的問題:

1)您希望降至控制有它的ZORDER調整,所以它是「幕後黑手」你控制你的面板休息...作爲想必你想要丟棄的圖像是背景嗎?

如果是這樣,那麼就去做:

c.SendToBack();

你完成了this.panel1.Controls.Add(c);

2)你實際上是下降幾個圖像插入面板,以及你希望他們被解僱了,好像他們是在列表中一個接一個垂直。

如果您需要此功能,則需要定位放置的圖像,以便指定頂部和左側座標,以便從顯示在面板中的「最底部」圖像控件開始。

根據您在.Control集合中維護控件的方式,您可以通過幾種不同方式計算座標。

如果出現在控件集合的控件正確排序/維持在順序等同於它們的垂直Y偏移量,那麼你可以簡單地看一下.Controls集合中的最後控制,發現其底部y位置:

eg

如果(this.panel1.Controls.Count == 0)
{
c.X = 0;
c.Y = 0;
}
else
{
c.X = 0;
c.Y = this.panel1.Controls [this.panel1.Controls.Count - 1] .Bottom;
}

如果不保持在像素Y的順序圖像控件,那麼你將不得不遍歷所有的控件.Controls集合中,找到一個其中有最大的「底部」,並使用它作爲新放置的圖像控件的起點。