簡體   English   中英

C# - 將 PictureBox 拖放到 TableLayoutPanel 上

[英]C# - Drag and Dropping PictureBox onto a TableLayoutPanel

我正在 C# 中構建一個類似拼字游戲的游戲,其中我有一組“字母”(PictureBox 控件),並且需要將它們拖放到游戲板上(TableLayoutPanel 顯示一個 PictureBox 控件網格)。

我最初嘗試在 MouseDown 事件處理程序內的字母 PictureBox 上使用 DoDragDrop() 方法,但是一旦我開始拖動,就無法讓控件執行任何操作。 我引用了這個代碼項目

用盡之后,我嘗試使用 MouseDown、MouseMove 和 MouseUp 事件處理程序“手動”移動 PictureBox:

private void letter1PictureBox_MouseDown(object sender, MouseEventArgs e)
    {
        if (sender is PictureBox && e.Button == MouseButtons.Left)
        {
            isDragging = true;
            dragOffsetX = e.X;
            dragOffsetY = e.Y;
        }
    }

private void letter1PictureBox_MouseMove(object sender, MouseEventArgs e)
    {
        if (isDragging)
        {
            PictureBox letter = (PictureBox)sender;

            letter.BringToFront();
            letter.Top += (e.Y - dragOffsetY);
            letter.Left += (e.X - dragOffsetX);
        }
    }

我的問題是,當試圖將 PictureBox 拖到我的 TableLayoutPanel 上(或它所在的 GroupBox 之外的任何地方)時,PictureBox 會消失在控件/面板后面。

http://i.stack.imgur.com/uAJV9.png

我會認為 BringToFront() 調用會阻止這種情況,不是嗎?

非常感謝您的幫助。

將 TableLayoutPanel 發送回設計 window 是否有幫助? 我猜你可能已經試過了..

誰是圖塊(PictureBox)的父級? 是TableLayoutPanel,還是Form?

您可能需要將 TableLayoutPanel 設為 PictureBox 的父級。 我不認為這種類型的面板“喜歡”它前面的對象。

此外,自己將瓷磚卡入 position 不是更容易/更好嗎?

int posX=(posX/tileSize)*tileSize;
int posY=(posY/tileSize)*tileSize;

integer 除法/乘法應將其對齊到網格中,但僅在用戶釋放圖塊后才應用它。 要知道瓷磚在哪個單元格中,不要在最后乘以 tileSize:

int cellX=(posX/tileSize);
int cellY=(posY/tileSize);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM