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

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

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

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

Q&A

解決済

2回答

6587閲覧

【C#】最大化した際のフォームの画面設定について

ss1122

総合スコア11

C#

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

0グッド

0クリップ

投稿2016/04/11 07:44

編集2016/04/11 08:25

こんにちわ。

最大化した際の、フォーム画面の位置とサイズを指定したいのですが、

this.MaximizedBounds = new Rectangle(15, 10, 1500, 1000);
「Rectangle」を使用しないで上記の様な設定が出来る方法を探しています。

this.MaximizedBounds.Location = new System.Drawing.Point(15, 10);
this.MaximizedBounds.Size = new System.Drawing.Size(1500, 1000);
この様な方法も試してはみたのですが、
"変数ではないため、'System.Windows.Forms.Form.MaximizedBounds' の戻り値を変更できません。"
とエラーが出てしまいました

何か解決策をご存知の方がいましたらご教授お願い致します。

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

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

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

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

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

guest

回答2

0

こんな、単純な話なのかなぁ?
Windows フォームアプリケーションの場合、
this.WindowState = FormWindowState.Maximized;
//this.WindowState = FormWindowState.Normal;
label1.Text = this.Size.Width.ToString();
label2.Text = this.Size.Height.ToString();
label3.Text = this.Location.X.ToString();
label4.Text = this.Location.Y.ToString();

投稿2016/04/11 08:59

編集2016/04/11 09:01
daive

総合スコア2028

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

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

ss1122

2016/04/11 10:12

回答ありがとうございます。 フォーム画面を最大化に設定する処理ではなく、 最大化した際のフォーム画面の位置とサイズを「Rectangle」を使用せずに設定する方法を探していたため、今回は catsforepaw さんをベストアンサーとさせて頂きます。 申し訳ありません。
guest

0

ベストアンサー

Rectangleは構造体で値渡しなので、MaximizedBoundsプロパティで取得したに変更を加えても元のRectangleオブジェクトに反映されないため、エラーになるのだと思います。

「事情」が判らないとアドバイスしづらいのですが、LocationとSizeが片方ずつしか設定できないということでしょうか。
その場合は、以下のようにすれば片方ずつ設定できます。

C#

1// Locationだけ変更したい場合 2this.MaximizedBounds = new Rectangle(new Point(15, 10), this.MaximizedBounds.Size); 3 4// Sizeだけ変更したい場合 5this.MaximizedBounds = new Rectangle(this.MaximizedBounds.Location, new Size(1500, 1000));

追記
下記コードで最大化時の位置とサイズの指定ができます。

using System.Runtime.InteropServices; : : : private struct POINT { public int x; public int y; } private struct MINMAXINFO { public POINT ptReserved; public POINT ptMaxSize; // 最大化フォームのサイズ public POINT ptMaxPosition; // 最大化フォームの位置 public POINT ptMinTrackSize; // フォームの最大サイズ public POINT ptMaxTrackSize; // フォームの最小サイズ } private const int WM_GETMINMAXINFO = 0x0024; protected override void WndProc(ref Message m) { if(m.Msg == WM_GETMINMAXINFO) { MINMAXINFO info = (MINMAXINFO)m.GetLParam(typeof(MINMAXINFO)); info.ptMaxPosition.x = 15; info.ptMaxPosition.y = 10; info.ptMaxSize.x = 1500; info.ptMaxSize.y = 1000; Marshal.StructureToPtr(info, m.LParam, true); return; } base.WndProc(ref m); }

投稿2016/04/11 08:06

編集2016/04/11 09:29
catsforepaw

総合スコア5938

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

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

ss1122

2016/04/11 08:23

ご回答ありがとうございます。 なぜ、エラーが出るのか理解出来ました。 ですが、私の言葉が足りず申し訳ありません。 処理にて「Rectangle」を使用しないで、最大化した際のフォーム画面の位置とサイズを設定する方法を探しています。 もし、ご存知でしたらご教授お願い致します。
catsforepaw

2016/04/11 08:59 編集

Formの最大化時の位置サイズ指定が`MaximizedBounds`プロパティであり、その型が`Rectangle`なので、基本的にはRectangleを使わずに指定することは無理だと思います。 ただ、Windows APIではウィンドウの最大/最小サイズ・最大化時の位置とサイズの制御を`WM_GETMINMAXINFO`メッセージで行っているため、`WndProc`メソッドをオーバーライドして`WM_GETMINMAXINFO`メッセージをハンドリングすればできるかもしれません。やったことがないので具体的な方法はすぐには提示できませんが。
catsforepaw

2016/04/11 09:27

WM_GETMINMAXINFOメッセージ処理で最大化時の位置とサイズが指定できることを確認しました。 サンプルコードは回答の方に追記します。
ss1122

2016/04/11 10:02

サンプルコードまで作成して頂き、本当にありがとうございます。 この様な方法があるとは考えてもいませんでしたので、大変勉強になりました。 また、何かございましたらご教授お願い致します。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問