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

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

ただいまの
回答率

90.47%

  • C#

    7474questions

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

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

解決済

回答 2

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 1,705

ss1122

score 3

こんにちわ。

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

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' の戻り値を変更できません。"
とエラーが出てしまいました

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

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 2

checkベストアンサー

0

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

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

// Locationだけ変更したい場合
this.MaximizedBounds = new Rectangle(new Point(15, 10), this.MaximizedBounds.Size);

// Sizeだけ変更したい場合
this.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 17:23

    ご回答ありがとうございます。
    なぜ、エラーが出るのか理解出来ました。

    ですが、私の言葉が足りず申し訳ありません。
    処理にて「Rectangle」を使用しないで、最大化した際のフォーム画面の位置とサイズを設定する方法を探しています。

    もし、ご存知でしたらご教授お願い致します。

    キャンセル

  • 2016/04/11 17:57 編集

    Formの最大化時の位置サイズ指定が`MaximizedBounds`プロパティであり、その型が`Rectangle`なので、基本的にはRectangleを使わずに指定することは無理だと思います。

    ただ、Windows APIではウィンドウの最大/最小サイズ・最大化時の位置とサイズの制御を`WM_GETMINMAXINFO`メッセージで行っているため、`WndProc`メソッドをオーバーライドして`WM_GETMINMAXINFO`メッセージをハンドリングすればできるかもしれません。やったことがないので具体的な方法はすぐには提示できませんが。

    キャンセル

  • 2016/04/11 18:27

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

    キャンセル

  • 2016/04/11 19:02

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

    また、何かございましたらご教授お願い致します。



    キャンセル

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 19:12

    回答ありがとうございます。

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

    申し訳ありません。

    キャンセル

  • 2016/04/12 11:30

    フォームが最大化されたときのサイズを指定する
    http://dobon.net/vb/dotnet/form/maximizedbounds.html
    こんな話だったのですね。m(__)m

    キャンセル

関連した質問

  • 解決済

    【意見募集中】C#で親フォームと子フォーム間で情報をやりとりする

    ※※※※※※※※※※※※※※※※※※※※※※※※※※※※ Qiitaにて投稿した内容です。  →【意見募集中】C#で複数のフォームを扱うときのメモ。 意見を募る場合はこちらのほうが

  • 解決済

    [C#]異なるダイアログで部品を共有したいのですが

    メモ帳のようなアプリを作っているのですが、検索ダイアログと置換ダイアログで共通する部分があり、(検索文字列のテキストボックス、大文字小文字区別のためのチェックボックスなど)共有化し

  • 解決済

    C#.netでフォームの遷移

    前提・実現したいことC#.netでフォームの遷移を行いたいのですが、新しいフォームが開いてしまい困っています。 新しいウィンドウではなく同じウィンドウで違うフォームを開くことはでき

  • 解決済

    文字列の横幅・縦幅を取得したい

    いつも大変お世話になっております。 ボタン内に入力される文字の縦幅・横幅を見て、文字が納まるように自動でボタンサイズを変えたいのですが、 ボタンサイズがwidth=75、Heig

  • 受付中

    C#で複数のPictureBoxを印刷したい。

    いつもお世話になります。  C#, Windows7, VisualStudio2013 Express, .NET4.5の組み合わせでFormアプリケーションを作っています。 

  • 解決済

    Taskが実行されません。

    ネットで、ThreadよりTaskを使ったほうが良いという記事を見て、コピペで使ってみましたが、動きません。 MSDNを見ても、同じようなコードがあったのでこれでいいのかなーと思

  • 解決済

    C#でTabPageにDataGridViewを表示させ、DataGridViewのサイズがClie...

    C#でTabPageにDataGridViewを表示させ、DataGridViewのサイズがClientSizeを超える場合に、スクロールバーを表示したいのですが表示されません.

  • 解決済

    C# ListBoxのダブルクリックイベントの取得

    C#でListBoxに表示された項目をダブルクリックすると、 別のListBoxに表示させるような処理をしたいです。 ツールボックス→プロパティ→MouseDoubleClickと

同じタグがついた質問を見る

  • C#

    7474questions

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