質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Visual Studio 2013

Microsoft Visual Studio 2013は、Microsoftによる統合開発環境(IDE)であり、多種多様なプログラミング言語に対応しています。 Visual Studio 2012の次のバージョンです

Q&A

解決済

2回答

8850閲覧

MDIフォーム、ウィンドウ最大化について。

fender0131

総合スコア121

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Visual Studio 2013

Microsoft Visual Studio 2013は、Microsoftによる統合開発環境(IDE)であり、多種多様なプログラミング言語に対応しています。 Visual Studio 2012の次のバージョンです

0グッド

3クリップ

投稿2015/11/17 09:20

編集2015/11/24 07:14

いつも大変お世話になっております。

親フォームを最大化し、その中で子フォームを最大化したいのですが、以下のプログラムですと、親フォームと子フォームが重なってしまいます。

何かいい方法など御座いますでしょうか?
お手数おかけして申し訳ございませんが、ご指導ご鞭撻の程よろしくお願い致します。

● 親フォーム

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace test
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();

// 最大化 this.WindowState = System.Windows.Forms.FormWindowState.Maximized; //子フォームとするフォームを作成する Form2 fm = new Form2(); //親フォームをこのフォームにする fm.MdiParent = this; //子フォームを表示する fm.Show(); } }

}

● 子フォーム

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace test
{
public partial class Form2 : Form
{
public Form2()
{
InitializeComponent();

// 最大化 this.WindowState = System.Windows.Forms.FormWindowState.Maximized; this.FormBorderStyle = FormBorderStyle.None; } }

}

イメージ説明

見づらいですが図も添付させて頂きました。

追記1===========================================

お答えありがとうございます。
追記させて頂きます。
再度ご教授願えませんでしょうか?

Tak1wa様のプログラムソースを実行させて頂きました。その際の画像が以下となります。

イメージ説明

青枠のバーが出てきてしまう、又、赤枠内に表記されていないが、クリックすると最小化・最大化・閉じるのイベントが起こってしまう。
という新たな問題が発生してしまいました。

子フォーム内を以下のようにすると、理想に近い形にはなりました。

●子フォーム

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace test
{
public partial class Form2 : Form
{
public Form2()
{
InitializeComponent();
this.FormBorderStyle = FormBorderStyle.None;
}

private void Form2_Load(object sender, EventArgs e) { // this.WindowState = System.Windows.Forms.FormWindowState.Maximized; } }

}

イメージ説明

この方法で進めるとした場合、
フォームプロパティ内の「Size」の値を調節する形となると思うのですが、
最大化した際の値はどのように取れますでしょうか?

今現在、Form2のサイズは「300x300」なので右側に親フォームが見えてしまっている状態です。

追記2===============================================

sgr-2様のプログラムソースをお借りし、実行してみました。
その結果、少しずれが生じてしまっているようです。

Tak1wa様からのコメントで、
「余談ですがFormBorderStyleの変更後にWindowStateを変更しないと位置などちょっとずれます」
とのアドバイスを頂いており、

「FormBorderStyle」後に、再度「this.WindowState = FormWindowState.Maximized;」で最大化を指示したのですが、
ズレが解消されませんでした。

何が原因かわかる方いらっしゃいますでしょうか?

何度も質問し心苦しいのですが、再度ご教授願えませんでしょうか?

● Form1

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace test
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();

this.IsMdiContainer = true; this.WindowState = FormWindowState.Maximized; } private void Form1_Load(object sender, EventArgs e) { //子フォームとするフォームを作成する Form2 fm = new Form2(); fm.MdiParent = this; fm.WindowState = FormWindowState.Maximized; // Form2のコンストラクタやLoadに書いても良いです fm.FormBorderStyle = FormBorderStyle.None; fm.Show(); } }

}

● Form2

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace test
{
public partial class Form2 : Form
{
public Form2()
{

InitializeComponent(); this.FormBorderStyle = FormBorderStyle.None; //this.WindowState = FormWindowState.Maximized; } private void Form2_Load(object sender, EventArgs e) { this.FormBorderStyle = FormBorderStyle.None; //this.WindowState = FormWindowState.Maximized; } }

}

● 追記3 ===================================================

ズレを解消することができませんでした・・・

何か進展がありましたら、再度ここに投稿させて頂きます。
皆様ご協力感謝いたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

こんにちは。
MDIで書いた時に、同様の現象を見た事がなかったので試してみました。
確かにForm1のコンストラクタの中でForm2を作って...と進めるとなりました。

以下のようにForm1のLoadの中で書く方法では問題あるでしょうか?
こちらだと、期待する表示になるのではないかと思います。

C#

1 public partial class Form1 : Form 2 { 3 public Form1() 4 { 5 InitializeComponent(); 6 this.IsMdiContainer = true; 7 this.WindowState = FormWindowState.Maximized; 8 } 9 10 private void Form1_Load(object sender, EventArgs e) 11 { 12 Form2 fm = new Form2(); 13 fm.MdiParent = this; 14 fm.WindowState = FormWindowState.Maximized; // Form2のコンストラクタやLoadに書いても良いです 15 fm.Show(); 16 } 17 }

Form2側には、特に何も書いてません。

コンストラクタ内で書くのとLoad内で書くので異なるのは、タイミングがあるのかも知れませんね。

投稿2015/11/18 02:12

編集2015/11/18 02:24
sgr-2

総合スコア294

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

fender0131

2015/11/18 08:19

お答えありがとうございます。 sgr-2様のソースをお借りした結果、大変理想に近づいてまいりました。 だだ、少しずれが生じてしまいました。 Tak1waさんのコメントで、 >>余談ですがFormBorderStyleの変更後にWindowStateを変更しないと位置などちょっとずれます。 とのアドバイスを頂いており、これが原因と考えられます。 もう少し調べてみますが、分からなかった場合、再度ご質問させて頂くかもしれませんその際はよろしくお願い致します。
guest

0

ベストアンサー

こんにちは。

WindowStateの変更をFormLoadイベントで行いましょう。
内部値の確認はしてませんがMDIとして表示されているかどうかでちょっと動きが違うような印象を受けます。
余談ですがFormBorderStyleの変更後にWindowStateを変更しないと位置などちょっとずれます。

C#

1public Form2() 2{ 3 InitializeComponent(); 4 5 // 最大化 6 //this.WindowState = System.Windows.Forms.FormWindowState.Maximized; 7 this.FormBorderStyle = FormBorderStyle.None; 8} 9 10private void Form2_Load(object sender, EventArgs e) 11{ 12 this.WindowState = System.Windows.Forms.FormWindowState.Maximized; 13}

いまいちですが、親フォームでMainMenuStripを設定してやることで対応できます。
また、最大化する場合はFormBorderStyleの設定がいらんのではと思います。代わりにWindowStateの設定をコンストラクタに移動しました。

C#

1public partial class Form1 : Form 2{ 3 public Form1() 4 { 5 InitializeComponent(); 6 // 最大化 7 this.WindowState = System.Windows.Forms.FormWindowState.Maximized; 8 9 //子フォームとするフォームを作成する 10 Form2 fm = new Form2(); 11 12 //親フォームをこのフォームにする 13 fm.MdiParent = this; 14 15 //子フォームを表示する 16 fm.Show(); 17 } 18 19 private void Form1_Load(object sender, EventArgs e) 20 { 21 this.MainMenuStrip = new MenuStrip(); 22 } 23} 24 25public partial class Form2 : Form 26{ 27 public Form2() 28 { 29 InitializeComponent(); 30 //this.FormBorderStyle = FormBorderStyle.None; 31 this.WindowState = FormWindowState.Maximized; 32 } 33 34 private void Form2_Load(object sender, EventArgs e) 35 { 36 //this.WindowState = System.Windows.Forms.FormWindowState.Maximized; 37 } 38}

欠点は、親フォームを閉じる時に一瞬子フォームのタイトルバーが表示されてしまう。

投稿2015/11/17 09:44

編集2015/11/18 01:52
Tak1wa

総合スコア4791

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

fender0131

2015/11/18 01:15

お答えありがとうございます。 再度質問があり、本文に追記させて頂きました。 よろしければ、再度ご教授願えませんでしょうか?
Tak1wa

2015/11/18 01:52

追記しました
fender0131

2015/11/18 08:15

いろいろ調べているうちに、返事が遅くなってしまいました。 申し訳ないです。 追記頂きありがとうございました。 大変参考になりました。 >>余談ですがFormBorderStyleの変更後にWindowStateを変更しないと位置などちょっとずれます。 確かに若干ずれてしまいました。 WindowStateコマンドをその後に入れてみたのですが、改善されませんでした。 もう少し調べて参ります。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問