當然這有得到很容易;我只是沒有任何運氣。如何從基於點的TabControl獲取TabPage?
如何獲得給定TabControl
的TabPage
其標籤包含給定的Point
?例如,如果我正在處理MouseUp
事件,並且我想知道鼠標在發佈時已結束的標籤。
我試過GetChildAtPoint
,但似乎總是返回第一個選項卡(除非我使用錯誤)。
當然這有得到很容易;我只是沒有任何運氣。如何從基於點的TabControl獲取TabPage?
如何獲得給定TabControl
的TabPage
其標籤包含給定的Point
?例如,如果我正在處理MouseUp
事件,並且我想知道鼠標在發佈時已結束的標籤。
我試過GetChildAtPoint
,但似乎總是返回第一個選項卡(除非我使用錯誤)。
試試這個:
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;
}
祝你好運!
是的,就是那個。 – 2010-10-29 16:06:49
我確實嘗試過,沒有運氣!男人,我認爲問題在於我正在使用*屏幕上的一個點,而不是與選項卡控件的客戶區相關。也許我可以很快地做翻譯... – 2010-10-29 16:11:03
你已經提到你正在使用[MouseUp]事件,我試過了,只是將[e.Location]傳遞給方法。 – Homam 2010-10-29 16:15:24
您可以嘗試使用GetChildAtPointSkip的GetChildAtPoint重載 - this Connect bug表明它可以工作。
絕對是一個有用的重載知道,但我似乎無法弄清楚如何在這裏應用它。 GetChildAtPointSkip枚舉的可用標誌是「不可見」,「禁用」和「透明」。但事實上,我實際上並不想「跳過」*任何*頁面。我只想要在給定點的實際標籤。我認爲聲稱這個bug的MS代表是通過Connect上的這個超載修復的,或者是錯誤的,或者是指一個稍微不同的錯誤。 – 2010-10-29 16:02:48
你的意思是你想要它的頭部懸停的頁面,對不對? – Homam 2010-10-29 15:43:21
@Homam:對,我想知道哪個* tab *點在(標籤本身,而不是它所連接的較大頁面)。 – 2010-10-29 15:44:34