0

Mdi コンテナーとして設定されている親フォームがあります。親フォームのメニュー バーをクリックして、Plot という子フォームを読み込みます。コードは次のとおりです。

protected void menuPlot_Click(object sender, EventArgs e)
{
    // ... load form with Plot settings in center of parent form

    // ... create a new instance of the Plot settings child form
    PlotSettings plotSettings = new PlotSettings();

    // ... set Welcome as the parent form for the Plot settings child window
    plotSettings.MdiParent = this;

    // ... display and position Plot settings child form
    plotSettings.StartPosition = FormStartPosition.CenterScreen;  // center child form 
    plotSettings.Show();  //  display child form
}

次の質問がある場合を除いて、これはうまく機能します。

  1. 子フォームを強制的に中央に残す方法はありますか。現時点では、コンテナ内でドラッグできます。ユーザーが移動できないようにしたい。現時点でgitを実行する唯一の方法は、子フォームをボーダレスにすることですが、これが機能するかどうかはわかりません。

  2. 子フォームをモーダルにする方法はありますか? はい、私は子フォームをモーダルにすることができることを知っていますが、それは私が望む親フォーム内に含まれなくなります。子フォームがアクティブなときに親コントロールを無効にする方法はありますか? 現在、子フォームの複数のインスタンスを開くことができますが、いつでもインスタンスを 1 つだけにしたいと考えています。

  3. 親フォームにいくつかのラベルがあり、ラベルは常に子フォームの上にあります。子フォームを強制的に最上位にする方法はありますか? 私は TopMost を使用していますが、これは機能していないようです。

ご協力いただきありがとうございます。

4

2 に答える 2

1
  1. 子フォームの「LocationChanged」イベントを使用し、コードを挿入してフォームを中央に配置します。

    this.Left = ((this.ParentForm.ClientRectangle.Width - this.Width) / 2);
    this.Top = ((this.ParentForm.ClientRectangle.Height - this.Height) / 2);
    
  2. フォームのインスタンスを 1 つだけ持つには、次を使用してその存在を確認します。

    if (!this.MdiChildren.Any<Form>(item => item is Form1))
    {
    
    }
    
  3. MDI フォーム ウィンドウで手動でグラフィックを再描画することもできますが、それ以外の場合はそこにコントロールを配置しません。(OnPaint と OnPaintBackgound をオーバーライドする必要があります。)

于 2011-11-29T13:36:28.993 に答える
0

ControlBoxMinimizeBox、およびMaximizeBoxを False に設定WindowStateし、 に設定するのはどうMaximizedですか?

次に、Panel、GroupBox、またはその他のビジュアル要素を、最大化された子フォーム内の中央に配置して、常に画面の中央に留まり、ユーザーがその要素のサイズを変更したり移動したりできないようにすることができます。

単一のインスタンスを開くだけでは、これは忙しい作業です。フォームが開いたら、開いているインスタンスを静的クラスに登録します。閉鎖されたら、登録を解除します。フォームを開く前に、インスタンスが静的クラスに登録されているかどうかを確認してください。そうであれば、それにフォーカスを設定し、そうでなければ、新しいインスタンスを開きます。

于 2011-11-28T22:06:39.360 に答える