Category / Section
How to get the location of tab with respect to screen in WinForms TabbedMDIManager?
1 min read
Location of tab
The TabControlAdded event should be handled to access the TabControlAdv. Then subscribe into the DrawItem event which handles the drawItemInfo and get the bounds of the tabs. This should be stored in a HashTable for further reference. Please refer the below code snippet which illustrates this:
C#
void tb_TabControlAdded(object sender, TabbedMDITabControlEventArgs args) { args.TabControl.DrawItem += new DrawTabEventHandler(mtp_DrawItem); } void mtp_DrawItem(object sender, DrawTabEventArgs drawItemInfo) { MDITabPanel mtp = sender as MDITabPanel; // Drawing background,borders,interior as usual drawItemInfo.DrawBackground(); drawItemInfo.DrawBorders(); drawItemInfo.DrawInterior(); //If hashtable contains entry for particular window title just update position else add a new entry if (!ht.Contains(mtp.TabPages[drawItemInfo.Index].Text)) ht.Add(mtp.TabPages[drawItemInfo.Index].Text, mtp.PointToScreen(drawItemInfo.Bounds.Location)); else ht[mtp.TabPages[drawItemInfo.Index].Text] = mtp.PointToScreen(drawItemInfo.Bounds.Location); }
VB
Private Sub tb_TabControlAdded(ByVal sender As Object, ByVal args As TabbedMDITabControlEventArgs) AddHandler args.TabControl.DrawItem, AddressOf DrawItem End Sub Private Sub DrawItem(ByVal sender As Object, ByVal drawItemInfo As DrawTabEventArgs) Dim mtp As MDITabPanel = CType(sender, MDITabPanel) ' Drawing background,borders,interior as usual drawItemInfo.DrawBackground() drawItemInfo.DrawBorders() drawItemInfo.DrawInterior() 'If hashtable contains entry for particular window title just update position else add a new entry If Not ht.Contains(mtp.TabPages(drawItemInfo.Index).Text) Then ht.Add(mtp.TabPages(drawItemInfo.Index).Text, mtp.PointToScreen(drawItemInfo.Bounds.Location)) Else ht(mtp.TabPages(drawItemInfo.Index).Text) = mtp.PointToScreen(drawItemInfo.Bounds.Location) End If End Sub