前提・実現したいこと
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; 47 … 48 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#での画面遷移で一般的なやり方や、簡単なやり方を教えてください。お願いします。
また、解答するとき、私が書いて送ったプログラムのように
なぜ必要であるというコメントや解説があると嬉しいです。
どうかお願い申し上げます <(_ _)>
あなたの回答
tips
プレビュー