根据您的描述,不清楚您是否要将气泡精确定位在新创建的选项卡上,或者您是否可以将其显示在选项卡条上,在固定的 x 轴位置,但根据 y- 正确定位条带的轴位置(这是两种方法中较简单的一种)。
因此,我将为更简单的场景提供解决方案,并为更复杂的场景提供选项。
首先是简单的解决方案。当标签位于顶部时,界限.TOP和ClientRectangle.top值不一样。当标签位于底部时,它们是。我们可以将此信息与 Bounds.Height 和 Bounds.Top 一起使用来计算正确的 y 轴位置。
下面是一些执行此操作的示例代码,虽然很幼稚。 (例如,它不会在创建后立即处理文档,这与由于用户拖动窗口而发生的情况不同,这留给读者作为练习。)
设置DockContent时,注册事件:
class DocumentWindow : DockContent {
//...
}
DocumentWindow doc = new DocumentWindow();
doc.Text = "Document 1";
doc.DockStateChanged += new EventHandler(doc_DockStateChanged);
doc.Show(this.dockPanel1, DockState.Document);
处理事件时:
void doc_DockStateChanged(object sender, EventArgs e)
{
DockContent doc = sender as DockContent;
if (doc != null)
{
if (doc.DockState == DockState.Document)
{
Debug.Write("Client:");
Debug.WriteLine(doc.ClientRectangle);
Debug.Write("Bounds:");
Debug.WriteLine(doc.Bounds);
int y = doc.ClientRectangle.Top == doc.Bounds.Top ? doc.ClientRectangle.Bottom : doc.Bounds.Top;
this.toolTip1.Show("You may tear this \r\nsucker out any \r\ntime you like!", doc.PanelPane, doc.PanelPane.Right, y, 5000);
}
}
}
如果您想要更高级的方法,事情就不会那么容易了。我想出的选项
因为你在下面:
1) 更改基础库代码以公开 DockPaneStripBase.Tab 类并公开选项卡矩形。
2) 实现您自己的自定义 DockPaneStrip,如 DockSample 应用程序代码所示。
3) 检查选项 1 和/或 2 的代码并设计一个方案,允许您计算放置工具提示的位置。
仅供参考,对于其他希望了解更高级方法所涉及的工作量的阅读本文的人。
WeifenLuo DockPanel 和 DockSample 应用程序的源代码可以从以下位置获得:
http://sourceforge.net/projects/dockpanelsuite/files/DockPanel%20Suite/2.5.0%20RC1/
是以_Src结尾的包名。