2008年12月15日月曜日

マホー

このエントリを参照してください。
はっちゅう君のウィンドウをフロートにしてサイズを変更して終了する。
そして再起動すると、ウィンドウのサイズは初期値で、中身だけ以前のサイズが再現されて気持ちが悪い。これ、はじめから入っているアドイン全てなのでどうしようもないのかと思ったが、
protected override void OnSizeChanged(EventArgs e)
{
this.ClientSize = this.ClientSize;
base.OnSizeChanged(e);
}
このオーバーライドだけで直った。
また、フロート注文ウィンドウがはっちゅう君を最小化しても消えない&最上位にい続けるのだが、これと同じ動作をさせるには
protected override void OnDockStateChanged(EventArgs e)
{
if (this.DockState == WeifenLuo.WinFormsUI.Docking.DockState.Float) {
this.TopLevel = true;
this.TopMost = true;
} else {
this.TopLevel = false;
this.TopMost = false;
}
base.OnDockStateChanged(e);
}
でOK。これでフロート時にははっちゅう君本体と一緒に最小化される事がなくなり、はっちゅう君を最小化しておけばあたかもスタンドアロンアプリのように振舞わせる事ができる。

追記:これだと最初の起動時にうまくいかなかったりして、結局、

public class MimohutaForm : AddInForm
{
public MimohutaForm()
{
if (this.DockState == DockState.Float) {
setIndependentWindow();
} else {
setDependentWindow();
}
}
private void setIndependentWindow()
{
this.TopMost = true;
this.TopLevel = true;
}
private void setDependentWindow()
{
this.TopMost = false;
this.TopLevel = false;
}

protected override void OnDockStateChanged(EventArgs e)
{
if (this.DockState == DockState.Float) {
setIndependentWindow();
} else {
setDependentWindow();
}
base.OnDockStateChanged(e);
}
protected override void OnSizeChanged(EventArgs e)
{
this.ClientSize = this.ClientSize;
base.OnSizeChanged(e);
}
}
こんな感じにするとアドインの内容と関係なしに、フォームの振る舞いとして、望ましいものとなると分かった。皆さん、どんなアドインを作る場合にもAddInFormはこう拡張して使いましょう。

0 件のコメント: