1

MDIアプリケーションがあります。メインのToolStripMenuItemとして設定されている「ウィンドウ」というラベルが付いています。ウィンドウメニューには、「カスケード」や「アイコンの配置」などの項目がいくつかあります。MdiWindowListItemMenuStrip

アプリケーションを実行すると、[ウィンドウ]メニューが[アイコンの配置]項目できれいに終了します。予想どおり、1つ以上のMDI子フォームを開くと、これらは自動的に。の後に追加されますToolStripSeparator。すべての子フォームを閉じると、「ウィンドウ」メニューから期待どおりに消えますが、ToolStripSeparator残ります。メニューが元の状態、つまりセパレータなしに戻ることを期待していました。

現状では、セパレータは自動的に追加されますが、自動的に削除されるわけではありません。もちろん、プログラムで余分なセパレーターを削除することもできますが、他の人がこれについて不満を言っていることはありません。何か間違ったことをしたために、それが起こっているのではないかと疑っています。お知らせ下さい。

4

2 に答える 2

1

「アイコンの配置」メニュー項目の後に独自の ToolStripSeparator メニュー項目を追加して、Visible プロパティを false に設定してみてください。

MDI 子フォームを開くときは、表示可能にします。

  Form f = new Form();
  f.Text = "Test Form";
  f.MdiParent = this;
  f.FormClosed += ChildClosed;
  f.Show();
  ts.Visible = true;

次に、ChildClosed メソッドで次のようにします。

void ChildClosed(object sender, FormClosedEventArgs e) {
  this.BeginInvoke((Action)delegate 
                      { ts.Visible = (this.MdiChildren.Count() > 0); }
                  );
}
于 2012-10-18T15:39:06.437 に答える
0

ts.Visible = (this.MdiChildren.Count() > 1)
子供のクローズドイベントで十分です。BeginInvoke は不要

于 2013-04-10T10:18:42.513 に答える