説明から、新しく作成されたタブの上にバブルを正確に配置するのか、それともタブストリップ上に表示されるのに問題がないのか、固定されたx軸の位置にあるが、のy軸の位置に基づいて正しく配置されるのかは不明です。ストリップ(これは2つのアプローチのうちのより単純なものです)。
そこで、より簡単なシナリオのソリューションと、より複雑なシナリオのオプションを提供します。
まず、簡単な解決策。タブが上にある場合、Bounds.TopとClientRectangle.Topの値は同じではありません。タブが下にあるとき、それらはあります。この情報をBounds.HeightおよびBounds.Topとともに使用して、適切なy軸の位置を計算できます。
以下は、Naiiveですが、これを実行するサンプルコードです。(たとえば、作成直後は、ユーザーがウィンドウをドラッグしたために発生した場合とは異なるドキュメントを処理しません。これは、読者の演習として残されています。)
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)DockSampleアプリケーションコードに示されているように、独自のカスタムDockPaneStripを実装します。
3)オプション1および/または2のコードを調べて、ツールチップを配置する場所を計算できるスキームを考案します。
参考までに、これを読んでいて、より洗練されたアプローチに伴う努力の量を理解したい人のために。WeifenLuo DockPanelとDockSampleアプリの両方のソースは、次の場所から入手できます。http:
//sourceforge.net/projects/dockpanelsuite/files/DockPanel%20Suite/2.5.0%20RC1/
これは_Srcで終わるパッケージ名です。