3

WindowState が Maximized に設定されている MDI フォームの子としてフォームを設定しました。

MDI コンテナーからそのフォームを開くと、最大化された状態で開きません。なぜこれが起こっているのですか?どうすれば最大化して開くことができますか?

これは、mdi コンテナーから子フォームを表示する方法です。

private void ShowNewForm(object sender, EventArgs e)
{
    FormChild childForm = new FormChild ();
    childForm.MdiParent = this;
    childForm.WindowState = FormWindowState.Maximized;
    childForm.Text = "Window " + childFormNumber++;
    childForm.Show();
}
4

14 に答える 14

11

これを解決するための最良の方法を見つけました..次の2行を使用してください:

frm r = new frm();
r.MdiParent = this;
r.Show();
r.WindowState = FormWindowState.Minimized;
r.WindowState = FormWindowState.Maximized;

結局のところ、フォームを最初に最小化し、次に最大化すると、目的の結果が得られます。

于 2013-03-17T10:40:14.473 に答える
5

フレームワークには本当にバグがあります。GUI から WindowState を Maximized に設定すると、フレームワークが混乱するようです。最大化されたサイズとデフォルトのサイズの間のどこかで奇妙な状態になります。

混合 MdiChild 状態のイメージ

このように設定された WindowState を使用すると、コードでそれを修正しようとしても無視されます。以下のコードは上の画像を生成しました。

private void ShowNewForm(object sender, EventArgs e)
    {
        Form1 childForm = new Form1();
        childForm.MdiParent = this;
        childForm.Text = "Window " + childFormNumber++;
        childForm.Show();
        childForm.WindowState = FormWindowState.Maximized;
    }

ShowNewForm() への後続の呼び出しは適切に表示されますが、最初の子は常にこの動作を示します。

GUI で WindowState を通常の状態に戻すだけで、コードを使用して上記のコードで示されているようにフォームを最大化します。

私のバージョン:
C# Express 10.0.40219.1 SP1
.NET 4.0.30319 SP1

于 2013-07-05T17:55:48.103 に答える
3

別の可視フォームが 2 番目の MIDChild を呼び出してテキストを設定すると、その MDIChild がその WindowState を追跡できなくなることがわかりました。

コメントアウトしてみる

childForm.Text = "Window " + childFormNumber++;

問題が解決するかどうかを確認してください。私にはフレームワークのバグのように見えます。

于 2011-09-04T16:46:49.727 に答える
2

次のことを試すことができます。

  form1 obj = new form1 ();

  obj.MdiParent = MDIGracular.ActiveForm;

  obj.StartPosition = FormStartPosition.CenterParent;

  obj.WindowState = FormWindowState.Minimized;

  obj.Dock = DockStyle.Fill;

  obj.Show();

  obj.WindowState = FormWindowState.Maximized;
于 2016-10-14T13:13:39.023 に答える
2

Your Child フォームを選択して F4 キーを押し、WindowState を通常に設定します。

子を最大化したい場合は、フォームプロパティを通常に設定する必要があります

次のようなコードを記述します。

FormChild childForm = new FormChild ();
childForm.MdiParent = this;
childForm.Show();
childForm.WindowState = FormWindowState.Maximized;
于 2014-12-21T19:20:07.627 に答える
2

フォームは最初に表示してから最大化する必要があります。

private void ShowNewForm(object sender, EventArgs e)
{
    FormChild childForm = new FormChild ();
    childForm.MdiParent = this;
    childForm.Text = "Window " + childFormNumber++;
    childForm.Show();
    childForm.WindowState = FormWindowState.Maximized;
}
于 2014-06-14T01:29:23.650 に答える
1

私はついに解決策を見つけました。それは私にとって正しく機能しています。これは、MDI フォームを扱っているときのフレームワークの問題であり、WindowState プロパティを最大化に変更するだけでは解決できません。以下のコードを記述する必要があります。

コード: Form1 form= 新しい Form1 form.Dock= DockStyle.Fill;

この Dock プロパティは、MDIForm の下の子フォームを最大化し、すべての子フォームの WindowState プロパティが Normal であることを確認します。

于 2020-07-19T16:23:07.037 に答える
1

別の解決策を見つけました。まず、System.Windows.Forms.Panel 要素をフォームに追加します。プロパティを設定

this.root.Dock = System.Windows.Forms.DockStyle.Fill;

次に、他のすべてのコントロールが Panel 内に配置されます。この場合、FormWindowState.Maximized はどこにでも設定でき、適切に機能します。

于 2021-08-22T08:48:08.513 に答える
0

それは簡単です。

子フォームのロード イベントで、コードを記述します。

this.WindowState = FormWindowState.Maximized;
于 2014-01-06T07:56:07.260 に答える
0

私は今、なぜあなたが設定しなければならないのかを知っていると思います

childForm.WindowState=FormWindowState.Maximized;

childForm.Show();

フォームを最大化に設定すると、取得したすべてのスペースが使用されるため、通常のフォームは画面全体に最大化され、MDI 子フォームは MDI 親フォーム内の指定されたスペースに最大化されます。ただし、この使用可能なスペースは「show」コマンドで設定されます。したがって、「show」コマンドの前に子フォームのウィンドウ状態を最大化に設定すると、それがどれだけ大きくなるかがわからないため、ウィンドウ状態「通常」のサイズで表示されますが、それ以外の場合は最大化されたフォームです.

MDI 子フォームを、あまりちらつきなく常に正しく最大化して開く唯一の方法は、「表示」コマンドの前に別のウィンドウ状態に設定し、表示後に最大化することです。

于 2016-01-13T10:58:32.050 に答える
0
FormChild childForm = new FormChild ();
childForm.MdiParent = this;

childForm.Text = "Window " + childFormNumber++;
childForm.Show();
childform.BringToFront();
childForm.WindowState = FormWindowState.Maximized;

それが役立つことを願っています

于 2013-02-18T07:44:02.397 に答える
0

デザイン モードでの WindowState の設定を無視します ([プロパティ] --> [WindowsState] --> [最大化])。

次に、フォームを表示した後:

childForm.WindowState=FormWindowState.Maximized;

私のバージョン:

  • ビジュアル スタジオ 2010
  • .NET 3.5
于 2014-08-13T18:33:55.313 に答える
0

プロパティで、プロパティをchildFormに設定します。次に、メソッドに次の行を追加します。Windows StateNormalchildForm Load

this.WindowState = FormWindowState.Maximized;
于 2015-11-09T12:55:29.777 に答える