C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

キー入力による画面遷移をしたい

[トピック内 3 記事 (1 - 3 表示)]  << 0 >>

■88010 / inTopicNo.1)  キー入力による画面遷移をしたい
  
□投稿者/ NeuM (1回)-(2018/07/29(Sun) 11:22:53)

分類:[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;
}
}
引用返信 編集キー/
■88012 / inTopicNo.2)  Re[1]: キー入力による画面遷移をしたい
□投稿者/ Hongliang (662回)-(2018/07/30(Mon) 09:34:46)
コードはほとんど読んでいませんが。
KeyPreview=trueにしたForm側でキー入力イベントをハンドリングし、各UserControlのVisibleを切り替えるようにした方が良いのでは。
引用返信 編集キー/
■88013 / inTopicNo.3)  Re[1]: キー入力による画面遷移をしたい
□投稿者/ furu (176回)-(2018/07/30(Mon) 09:53:54)
No88010 (NeuM さん) に返信
> 何がおかしいのか教えてください。お願いします。

Keypressedメソッドは誰がいつ呼ぶのでしょうか?
引用返信 編集キー/

このトピックをツリーで一括表示


トピック内ページ移動 / << 0 >>

このトピックに書きこむ