4

MDI コンテナー フォームと、タイトル バーのテキスト自体を個別に更新するいくつかの子フォームがあります。子フォームで Text プロパティが変更された後、メニューを開いたときに、ウィンドウ リスト メニューで子からの新しいタイトル バー テキストが更新されません。これは、MdiWindowListItem プロパティを介して .NET によって提供される、自動生成されたウィンドウ リストです。

変更は、別のイベントがウィンドウ リストを物理的に変更した場合 (新しい子を開く、子を閉じる、別の子に切り替える) にのみ伝播します。

プログラムでウィンドウ リストを強制的に更新する方法はありますか? 子のタイトルバーのテキストが変更されると同時に、メニューの有効化/無効化を行うコードが既にいくつかあります。

次のことを試しましたが、成功しませんでした:

  • メイン MenuStrip の Update()
  • メインの MenuStrip の Refresh()
  • ウィンドウ MenuStrip の Invalidate()
  • 実行時にウィンドウ リスト項目の 1 つで Invalidate()
  • 実行時にウィンドウ リスト項目の 1 つで Checked 状態を 2 回切り替える

メニュー項目、その親 ToolStrip、またはメニュー システムを含む親フォームで呼び出す、リモートで実行可能な関数は他にないようです。

4

3 に答える 3

9

上記の解決策は私にはうまくいきませんでした。しかし、私はリンクをたどって、これを見つけました。これは完全に機能します:

private void windowMenu_DropDownOpening(object sender, EventArgs e)
{
    if (this.ActiveMdiChild != null)
    {
        Form activeChild = this.ActiveMdiChild;

        ActivateMdiChild(null);
        ActivateMdiChild(activeChild);
    }
}

ありがとうございました!

于 2009-08-28T17:45:01.470 に答える
2

このハンドラーを使用して、TextChanged イベントを子フォームに追加する必要があります。

private void childForm_TextChanged(object sender, EventArgs e) {
    this.ActivateMdiChild( null );
    this.ActivateMdiChild( sender as Form );
} 

http://social.msdn.microsoft.com/forums/en-US/winforms/thread/a36b89aa-57aa-48b5-87a6-49fbddc9c92d

于 2009-08-28T17:20:34.640 に答える
0

アクティブ化/非アクティブ化する代わりに、ウィンドウのタイトルが変更されるたびに、WM_MDIREFRESHMENU メッセージを MDI クライアント (フレームではない) ウィンドウに送信できます。

http://msdn.microsoft.com/en-us/library/windows/desktop/ms644919%28v=VS.85%29.aspx

于 2011-12-02T12:56:21.013 に答える