2010-10-29 71 views
2

當然這有得到很容易;我只是沒有任何運氣。如何從基於點的TabControl獲取TabPage?

如何獲得給定TabControlTabPage其標籤包含給定的Point?例如,如果我正在處理MouseUp事件,並且我想知道鼠標在發佈時已結束的標籤。

我試過GetChildAtPoint,但似乎總是返回第一個選項卡(除非我使用錯誤)。

+0

你的意思是你想要它的頭部懸停的頁面,對不對? – Homam 2010-10-29 15:43:21

+0

@Homam:對,我想知道哪個* tab *點在(標籤本身,而不是它所連接的較大頁面)。 – 2010-10-29 15:44:34

回答

5

試試這個:

TabPage GetPageByPoint(TabControl tabControl, Point point) 
{ 
    for (int i = 0; i < tabControl.TabPages.Count; i++) 
    { 
     TabPage page = tabControl.TabPages[i]; 
     if (tabControl.GetTabRect(i).Contains(point)) 
      return page; 
    } 
    return null; 
} 

祝你好運!

+0

是的,就是那個。 – 2010-10-29 16:06:49

+0

我確實嘗試過,沒有運氣!男人,我認爲問題在於我正在使用*屏幕上的一個點,而不是與選項卡控件的客戶區相關。也許我可以很快地做翻譯... – 2010-10-29 16:11:03

+0

你已經提到你正在使用[MouseUp]事件,我試過了,只是將[e.Location]傳遞給方法。 – Homam 2010-10-29 16:15:24

2

您可以嘗試使用GetChildAtPointSkip的GetChildAtPoint重載 - this Connect bug表明它可以工作。

+0

絕對是一個有用的重載知道,但我似乎無法弄清楚如何在這裏應用它。 GetChildAtPointSkip枚舉的可用標誌是「不可見」,「禁用」和「透明」。但事實上,我實際上並不想「跳過」*任何*頁面。我只想要在給定點的實際標籤。我認爲聲稱這個bug的MS代表是通過Connect上的這個超載修復的,或者是錯誤的,或者是指一個稍微不同的錯誤。 – 2010-10-29 16:02:48