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

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

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

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

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

Windows Forms

Windows Forms(WinForms)はMicrosoft .NET フレームワークに含まれる視覚的なアプリケーションのプログラミングインターフェイス(API)です。WinFormsは管理されているコードの既存のWindowsのAPIをラップすることで元のMicrosoft Windowsのインターフェイスのエレメントにアクセスすることができます。

受付中

C#でのpanel内のユーザーコントロールの画面遷移の仕方を教えてください

退会済みユーザー

退会済みユーザー

総合スコア0

C#

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

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

Windows Forms

Windows Forms(WinForms)はMicrosoft .NET フレームワークに含まれる視覚的なアプリケーションのプログラミングインターフェイス(API)です。WinFormsは管理されているコードの既存のWindowsのAPIをラップすることで元のMicrosoft Windowsのインターフェイスのエレメントにアクセスすることができます。

0回答

0リアクション

0クリップ

457閲覧

投稿2022/09/21 12:10

前提・実現したいこと

VisualStudioでwindows formのForm上には
Panel1(左上)、Panel2(右上)、Panel3(左下)、Panel4(右下)で構成されています。

Panel2にはUserControl1の画面が追加している。
Panel4には画面遷移するためにUserControlA、UserControlB…UserControlZの画面
と複数のユーザーコントロールが追加されています。

ユーザコントロールAからユーザコントロールBへ
ユーザコントロールBからユーザコントロールCへ
・・・
と画面遷移する流れである。

共通画面であるpanel2のユーザコントロールに配置されているボタン選択することで
アルファベットAからFなどユーザコントロールのどの画面からでもUsercontrolZの画面に画面遷移する設定です。

私はPanel4にユーザコントロールの画面の情報のデータを受け渡し(または更新)する
画面遷移にしたいです。

C#での画面遷移の仕方を教えてください

発生している問題・試したこと

今まで調べた中で出てきたのは
Visible = trueかVisible = falseによる方法か
https://punyo-er-met.hateblo.jp/entry/2016/04/10/103632

form.Show()やform.Hide()による方法
https://www.kisoplus.com/bbs/index.php?res=35
https://dk521123.hatenablog.com/entry/38020554
https://hiropon-progra.com/csharp-form-show-otherform/

表示するか非表示するかという方法でしか見つかりませんでした。

サンプルではユーザーコントロールの数が決まっている場合は良いですが、
実際のサイトのようにpanel4に追加するユーザコントロールの画面が100以上の複数ある場合

すべてのボタンのイベントにVisibleを設定することは機能にも負担があったり、
プログラムするときにも面倒が出てきます。

該当のソースコード

Formのコード

c#

public partial class Form1 : Form {    //Panel2に追加するユーザコントロール    public UserControl1 header = new UserControl1(); //panel4に追加するユーザコントロール public UserControlA a = new UserControlA(); public UserControlB b = new UserControlB(); public UserControlC c = new UserControlC(); public UserControlD d = new UserControlD(); public UserControlE e = new UserControlE();  public UserControlF f = new UserControlF();     …    public UserControlZ z= new UserControlF(); //どの画面からでも表示する public UserControlZ usercontrolZ = new UserControlZ(); public Form1() { InitializeComponent(); //panel2にユーザコントロールを追加する panel2.Controls.Add(header); //panel4にユーザコントロールを追加する panel4.Controls.Add(a); panel4.Controls.Add(b); panel4.Controls.Add(c); panel4.Controls.Add(d); panel4.Controls.Add(e); panel4.Controls.Add(f);     …      panel4.Controls.Add(z);     //どの画面からでも表示するユーザーコントロールの画面を追加  panel4.Controls.Add(usercontrolZ); //起動時に表示 a.Visible = true; //他の画面の非表示 b.Visible = false; c.Visible = false; d.Visible = false; e.Visible = false; f.Visible = false;     z.Visible = false; usercontrolZ.Visible = false; } }

UserControlAのコード

c#

public partial class UserControlA : UserControl { public UserControlA() { InitializeComponent(); } private void botton_click(object sender, EventArgs e) { //windowformを取得するプログラム Form1 form = (Form1)this.FindForm(); //画面の切り替え form.a.Visible=false; form.b.Visible=true; } }

c#

public partial class UserControl1 : UserControl { public UserControl1() { InitializeComponent(); } private void botton_click(object sender, EventArgs e) { //windowformを取得するプログラム Form1 form = (Form1)this.FindForm(); //画面の切り替え form.usercontrolZ.Visible=true; form.a.Visible=false; form.b.Visible=false; form.c.Visible=false; form.d.Visible=false; form.e.Visible=false; form.f.Visible=false;      …     form.z.Visible=false; } }

私がプログラムの初心者であるが
次元したいのはPanel4にユーザコントロールの画面の情報のデータを受け渡し(または更新)する
画面遷移をしたいです。

c#での画面遷移で一般的なやり方や、簡単なやり方を教えてください。お願いします。

また、解答するとき、私が書いて送ったプログラムのように
なぜ必要であるというコメントや解説があると嬉しいです。
どうかお願い申し上げます <(_ _)>

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

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

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

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

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

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

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

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

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

2022/09/21 13:22

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

2022/09/21 14:28

こちらの質問が他のユーザーから「過去に投稿した質問と同じ内容の質問」という指摘を受けました。

TN8001

2022/09/21 13:26

これはひどい まともに回答して損した気分

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

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

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

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

ただいまの回答率
86.12%

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

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

質問する

関連した質問

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

C#

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

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

Windows Forms

Windows Forms(WinForms)はMicrosoft .NET フレームワークに含まれる視覚的なアプリケーションのプログラミングインターフェイス(API)です。WinFormsは管理されているコードの既存のWindowsのAPIをラップすることで元のMicrosoft Windowsのインターフェイスのエレメントにアクセスすることができます。