public class ほにゃらら : AddInForm
{
#region メソッド
private void setIndependentWindowOrDependentWindow()
{
if (this.DockState == DockState.Float) {
this.TopMost = true;
this.TopLevel = true;
} else {
this.TopMost = false;
this.TopLevel = false;
}
}
#endregion
#region カスタムしたメソッド
protected override string GetPersistString()
{
//インスタンス毎に保持する設定を永続化文字列に", "に続けて繋げて返す。
return base.GetPersistString() + ", " + ほにゃらら;
}
protected override void OnDockStateChanged(EventArgs e)
{
setIndependentWindowOrDependentWindow();
base.OnDockStateChanged(e);
}
protected override void OnSizeChanged(EventArgs e)
{
if (this.DockState == DockState.Float) {
this.ClientSize = this.ClientSize;
}
base.OnSizeChanged(e);
}
protected override void OnLoad(EventArgs e)
{
setIndependentWindowOrDependentWindow();
base.OnLoad(e);
}
#endregion
}
ただ、起動時に復元されたフローティングフォームの最前面表示の設定(TopMost=true)が有効にならない問題は未だ解決せず。まあ、ビルトインの注文フォーム(フロート)でも同じ問題があるし、ここまでやれば御の字だろう。
追記:上記問題は、setIndependentWindowOrDependentWindowメソッドを
private void setIndependentWindowOrDependentWindow()
{
if (this.DockState == DockState.Float) {
this.TopMost = true;
this.TopLevel = true;
} else {
this.TopMost = true;//ポイント!
this.TopLevel = false;
}
}
と変更すると解決するようだ。どうやら、はっちゅう君プラスの起動時にフォームが復元される時、DockStateがDockState.Floatにセットされていないのが問題のようだが、ドッキングフォームの場合TopMostプロパティに意味はないので、フロート状態であるか否かに関わらずTopMostプロパティをtrueにしてやれば良いという事らしい。