2012-08-26 178 views
0

我有一個包含只有兩件事情形式,一個圖片框標籤鼠標點擊位置上的PictureBox未檢測到在標籤

我添加了一個鼠標點擊事件處理程序的圖片框。

this.pictureBox1.MouseClick += picture_MouseClick; 

在處理程序內我需要檢查鼠標單擊的位置是否在標籤的範圍內。爲此,我使用鼠標事件位置並檢查該位置是否在標籤的範圍內。

private void picture_MouseClick(object sender, MouseEventArgs e) 
{ 
    if (label1.Bounds.Contains(e.Location)) 
    { 
     MessageBox.Show("FOUND YOU!"); 
    } 
} 

我預計這個工作,因爲它似乎很容易。然而,導致所顯示的消息框點擊位置(圖像中的橙色框)被向下偏移,並以標籤的右側。

Form With Label

這是因爲鼠標事件是相對於圖片框和標籤範圍是相對於表?或相反亦然?

順便說一句,您在圖像中看到的標籤在運行時隱藏。我只是將標籤用作知道用戶是否點擊某個特定位置的「黑客」方式。

public Form1() 
{ 
    InitializeComponent(); 
    this.label1.Visible = false; 
    this.pictureBox1.MouseClick += picture_MouseClick; 
} 

(我試過減去EX中標籤的寬度和EY標籤的高度,但似乎並沒有工作。)

謝謝

+0

如果你嘗試點擊標籤,PictureBox的Click事件不會觸發。 – SLaks

+0

啊,但這是訣竅!我實際上在運行時隱藏了標籤。我只是使用標籤的邊界來知道鼠標點擊的位置。在這之後,我真的很喜歡HTML圖像地圖,我正在使用隱藏標籤的位置來檢查鼠標點擊的位置。 –

回答

1

e.Location是相對於圖片框左上角的鼠標位置(點)。
Bounds屬性相對於控件的容器。
(在這種情況下,容器的形式,爲你和休閒褲已經正確地指出)

要檢查正確的位置上,我會用這個代碼(現在的測試)

Point p = e.Location; 
p.X += pictureBox1.Left; 
p.Y += pictureBox1.Top; 
if(label1.Bounds.Contains(p)) 
    ..... 
+0

那麼,我正在使用Visual Studio,我只是_Dragged_一個PictureBox到我的窗體然後_dragged_標籤頂部的PictureBox。我懷疑一個PictureBox可以包含一個標籤,因此它的父母可能是Form。 –

+0

@Steve:No; 'PictureBox'不是一個容器。 – SLaks