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

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

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

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

Visual Studio

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

Windows Forms

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

Q&A

0回答

1093閲覧

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クリップ

投稿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#

1public partial class Form1 : Form 2 { 3   //Panel2に追加するユーザコントロール 4   public UserControl1 header = new UserControl1(); 5 6 //panel4に追加するユーザコントロール 7 public UserControlA a = new UserControlA(); 8 public UserControlB b = new UserControlB(); 9 public UserControlC c = new UserControlC(); 10 public UserControlD d = new UserControlD(); 11 public UserControlE e = new UserControlE(); 12  public UserControlF f = new UserControlF(); 13    … 14   public UserControlZ z= new UserControlF(); 15 16 //どの画面からでも表示する 17 public UserControlZ usercontrolZ = new UserControlZ(); 18 19 public Form1() 20 { 21 InitializeComponent(); 22 23 //panel2にユーザコントロールを追加する 24 panel2.Controls.Add(header); 25 26 //panel4にユーザコントロールを追加する 27 panel4.Controls.Add(a); 28 panel4.Controls.Add(b); 29 panel4.Controls.Add(c); 30 panel4.Controls.Add(d); 31 panel4.Controls.Add(e); 32 panel4.Controls.Add(f); 33    … 34     panel4.Controls.Add(z); 35    //どの画面からでも表示するユーザーコントロールの画面を追加  36 panel4.Controls.Add(usercontrolZ); 37 38 //起動時に表示 39 a.Visible = true; 40 41 //他の画面の非表示 42 b.Visible = false; 43 c.Visible = false; 44 d.Visible = false; 45 e.Visible = false; 46 f.Visible = false; 4748     z.Visible = false; 49 50 usercontrolZ.Visible = false; 51 } 52 }

UserControlAのコード

c#

1 public partial class UserControlA : UserControl 2 { 3 4 public UserControlA() 5 { 6 InitializeComponent(); 7 } 8 9 private void botton_click(object sender, EventArgs e) 10 { 11 //windowformを取得するプログラム 12 Form1 form = (Form1)this.FindForm(); 13 //画面の切り替え 14 form.a.Visible=false; 15 form.b.Visible=true; 16 } 17}

c#

1 public partial class UserControl1 : UserControl 2 { 3 4 public UserControl1() 5 { 6 InitializeComponent(); 7 } 8 9 private void botton_click(object sender, EventArgs e) 10 { 11 //windowformを取得するプログラム 12 Form1 form = (Form1)this.FindForm(); 13 //画面の切り替え 14 form.usercontrolZ.Visible=true; 15 16 form.a.Visible=false; 17 form.b.Visible=false; 18 form.c.Visible=false; 19 form.d.Visible=false; 20 form.e.Visible=false; 21 form.f.Visible=false; 22     … 23    form.z.Visible=false; 24 } 25}

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

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

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

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

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

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

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

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

TN8001

2022/09/21 13:26

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問