|
分類:[C#]
初めて利用させていただきます。
やりたいことは、ゲームなどにある タイトル画面⇔メニュー画面⇔ゲーム画面 といった画面遷移で、パネルとユーザーコントロールを使い、特定のキーが入力されたときに 移るようにしたいのですが、キーイベントが一つ前のユーザーコントロールのもの(?) になっているみたいです。 何がおかしいのか教えてください。お願いします。 また、もっとスマートな方法があればお手数ですが教えていただきたいです。
環境:Visual Studio 2017
****************************************************** Form1.cs
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms;
namespace test { public partial class Form1 : Form { public static UserControl1 ctr1; public static UserControl2 ctr2; public static UserControl3 ctr3;
public Form1() { InitializeComponent(); ctr1 = new UserControl1(); ctr2 = new UserControl2(); ctr3 = new UserControl3();
panel1.Controls.Add(ctr1); panel1.Controls.Add(ctr2); panel1.Controls.Add(ctr3);
ctr1.Visible = true; ctr2.Visible = false; ctr3.Visible = false; } private void Form1_Load(object sender, EventArgs e) { } private void Panel1_Paint(object sender,PaintEventArgs e) { } } } ******************************************************************* UserControl1.cs
/*usingディレクティブはForm1.csと同じため省略*/
namespace test { public partial class UserControl1 : UserControl { public UserControl1() { InitializeComponent(); Timer timer = new Timer(); timer.Interval = 33; timer.Tick += new EventHandler(Update); timer.Start(); } private void Draw(object sender, PaintEventArgs e) { //いろんな処理 }
public void Update(object sender, EventArgs e) { Invalidate(); } private void Keypressed(object sender, KeyPressEventArgs e) { if (e.KeyChar == 'b') { Form1.ctr1.Visible = false; Form1.ctr2.Visible = true; Form1.ctr3.Visible = false; } if (e.KeyChar == 'c') { Form1.ctr1.Visible = false; Form1.ctr2.Visible = false; Form1.ctr3.Visible = true; } //この画面内でのキー入力による処理 } } } *************************************************** UserControl2.cs /*キーイベント以外UserControl1と同じため省略*/
private void Keypressed(object sender, KeyPressEventArgs e) { if (e.KeyChar == 'c') { Form1.ctr1.Visible = false; Form1.ctr2.Visible = false; Form1.ctr3.Visible = true; } if (e.KeyChar == 'a') { Form1.ctr1.Visible = true; Form1.ctr2.Visible = false; Form1.ctr3.Visible = false; } } *************************************************** UserControl3.cs /*UserControl2と同様に省略*/
private void Keypressed(object sender, KeyPressEventArgs e) { if (e.KeyChar == 'a') { Form1.ctr1.Visible = true; Form1.ctr2.Visible = false; Form1.ctr3.Visible = false; } if (e.KeyChar == 'b') { Form1.ctr1.Visible = false; Form1.ctr2.Visible = true; Form1.ctr3.Visible = false; } }
|