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

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

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

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

解決済

パネルに追加したユーザーコントロールを適切に自動サイズ調整する方法

退会済みユーザー

退会済みユーザー

総合スコア0

C#

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

1回答

0リアクション

0クリップ

378閲覧

投稿2022/09/17 15:05

編集2022/09/19 12:37

前提

visual stadio2022を使ってc#でプログラミングしています。
ショッピングサイトのようなシステムを作っています。
それを実装のとき、Windowサイズをマウスで大きさが変更するとき、
Form内のパネルに追加したユーザーコントロールのSizeの大きさが変わらない。

VisualStudioでwindows formのForm上には
Panel1(左上)、Panel2(右上)、Panel3(左下)、Panel4(右下)で構成されています。
また、Panel3(左下)にはUserControl1とUserControl2
Panel4(右下)にはUserControl3、UserControl4…
と複数のユーザーコントロールが追加されています。

これのユーザーコントロールは
例)画面遷移を行うときにpanel3内のUserControl1からUserControl2に表示を変えて、
Panel4のUserControl3はUserControl4…などの表示に変わり使います。

実現したいこと

実装するとき、Googleサイトやショッピングサイト(Amazonのサイドメニューや商品の一覧の画面)のようにWindowサイズをマウスで変更するとき、
配置されているpanelに追加したユーザーコントロールの大きさがFormの画面のサイズやpanelのサイズに自動的に調整されていること

つまり、
1.Formの大きさを変えたとき、panel3やpanel4の大きさがFormのサイズに合わせて自動的に変わるようにする。
2.例)panel3に追加されているUserControl1とUserControl2の大きさが
1のときに調整されたpanel3と同じサイズで適切に調整し画面に表示されている。

試したこと

1について、panel3のAnchroプロパティをtop、left、bottomと設定することで
panel3の大きさがWindowsフォームのサイズ変更とともに、パネルの高さが広がったり縮んだりするようになりました。

その後
2についてUserControl1を適切にサイズ変更するために以下の2つのソースコードのどちらかを使った。

c#

public partial class UserControl1 : UserControl { public UserControl1() { InitializeComponent();     //Formを取得        Form1 form = (Form1)this.FindForm();     //ユーザーコントロールのサイズを変更(下の2つのコードのどちらかを使って行う) form.userControl1.Size = form.panel3.Size; Size = form.panel3.Size; } }

c#

public partial class UserControl1 : UserControl { private void UserControl1_SizeChanged(object sender, EventArgs e) { Form1 form = (Form1)this.FindForm(); //form.userControl1.Size = form.panel3.Size; Size = form.panel3.Size; } }

また、 AutoSizeとAutoSizeModeを変更するなどのさまざまな組み合わせを使用しようとしましたが、うまく機能していないようです。最終的にUserControlのサイズが十分に大きくならなず、まったく変わらない状態になってしまいます。

補足

Form1のソースコードはこのようになっています。

c#

public partial class Form1 : Form { //ユーザーコントロール1 public userControl1 page = new UserControl1(); //ユーザーコントロール2 public userControl2 page = new UserControl2(); //ユーザーコントロール3 public userControl3 page = new UserControl3(); //ユーザーコントロール4 public userControl4 page = new UserControl4(); public Form1() { InitializeComponent(); //パネル4にユーザーコントロールを追加 panel4.Controls.Add(userControl3); panel4.Controls.Add(userControl4); //画面遷移するための画面の表示の切り替え userControl3.Visible = false; userControl4.Visible = true; //ユーザーコントロールの画面を追加 panel3.Controls.Add(userControl1); panel3.Controls.Add(userControl2);   userControl1.Visible = false; userControl2.Visible = true; } }

以下のような質問にはリアクションをつけましょう

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

リアクションが多い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

下記のような質問は推奨されていません。

  • 間違っている
  • 質問になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

適切な質問に修正を依頼しましょう。

2022/09/25 02:03

こちらの質問が複数のユーザーから「やってほしいことだけを記載した丸投げの質問」という指摘を受けました。

YAmaGNZ

2022/09/17 15:45

「適切」とはどうなれば適切なのですか?
SurferOnWww

2022/09/17 22:10

.NET Framework なのか .NET Core/.NET どっちかとそのバージョンを書いてください。
KOZ6.0

2022/09/18 09:07

やりたいことが伝わってこないですね。 フォームのサイズ変更前と変更後の画像を貼り付けることはできないでしょうか? こうなってほしいというのをデザインして表示すれば良いです。
退会済みユーザー

退会済みユーザー

2022/09/18 13:29

.NET Framework のバージョンでお願いします。 適切とは実装したとき、ユーザーコントロールとpanelのサイズが同じサイズになることです。
退会済みユーザー

退会済みユーザー

2022/09/18 13:35

やりたいことは実装したとき、Windowサイズをマウスで変更したとき、 レイアウトに関して、 panel3の大きさが自動的に変わり、それと同時にpanel3に追加したUserControl1の大きさがpanel3の大きさに自動的に同じなって表示できることです。
YAmaGNZ

2022/09/18 13:36

パネルの中にユーザーコントロールが複数あるのですよね? そうなのであればパネルの大きさ=ユーザーコントロールの大きさにはならないのではないですか? 図で示すなりスクリーンショットなりで表現してください。
退会済みユーザー

退会済みユーザー

2022/09/19 11:27

Formをマウスで動かしたとき、 panel3にはUserControlの画面とpanel3の空白ができてしまいます。 その空白をなくすために、パネルの大きさ=ユーザーコントロールの大きさを自動的にしたいです。
YAmaGNZ

2022/09/19 11:46

Panel3にはUserControl1とUserControl2があるわけですよね? Panel3の大きさ=UserControl1の大きさであればUserControl2は表示する場所がない Panel3の大きさ=UserControl1の大きさ+UserControl2の大きさであれば UserControl1の大きさとUserControl2の大きさはどのように変化するのか 上記を説明しないとダメなのではないですか?
退会済みユーザー

退会済みユーザー

2022/09/19 12:33

説明不足ですみません。 UserControl1とUserControl2はPanel3内で画面遷移をするために必要なものです。
YAmaGNZ

2022/09/19 13:34

UserControl1とUserControl2は同時に表示されずにあるタイミングで片方が表示、もう片方が非表示と切り替わるということですか? それならTN8001さんの回答のようにDockプロパティを設定するか、各ユーザーコントロールにもAnchroプロパティを設定すればいいでしょう。

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
86.12%

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

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

質問する

関連した質問

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

C#

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