私は Dockpanel-suite を使用しており、基本的に 3 つのフォームを開いています。これらの 1 つは複数のドキュメントを開くことができる「ドキュメント」フォームで、他の 2 つのフォームは単一のインスタンスです。
ある段階で、いくつかの文書フォームを見つけて閉じたいと思っています。現在、dockpanel-suite のドキュメントによると、
DockPanel から DockContent を削除する DockPanel から DockContent を解放するには、DockContent.DockHandler.DockPanel を null に設定するだけです。
しかし、DockHandler は読み取り専用なので、null に設定することはできません。では、必要なドキュメントを見つけて、閉じるなどのアクションを実行するにはどうすればよいでしょうか?
現時点ではこれを行っています。
foreach (DockContent dock in this.dockPanel1.Documents)
{
if (dock.GetType() == typeof(FormQueryBuilder))
{
FormQueryBuilder qb = (FormQueryBuilder)dock;
string number = qb.TabText.Replace("Query ", ""); //close all documents except those which start "Query 1"
if (Convert.ToInt32(number) > 1)
{
dock.Close();
}
}
}
奇妙なことに、dock.Close() を呼び出すとドキュメントが閉じますが、これがメイン (含む) フォームの "FormClosing" イベント中に呼び出されると、フォームが閉じられなくなります。これをキャンセルするために何らかの値を設定しているようです!