[C#] コンソールでのキー入力の取得方法
C#でコンソールアプリケーションにおいてキー入力を取得するには、Console.ReadKeyメソッド
を使用します。
このメソッドは、ユーザーがキーを押すまでプログラムの実行を一時停止し、押されたキーの情報をConsoleKeyInfo
オブジェクトとして返します。
Console.ReadKey
には引数としてtrue
またはfalse
を指定でき、true
を指定すると押されたキーがコンソールに表示されません。
これにより、ユーザーの入力を非表示にしたい場合に便利です。
ConsoleKeyInfo
オブジェクトからは、押されたキーの文字やキーコードを取得することができます。
コンソールアプリケーションでの基本的なキー入力
Console.ReadKeyメソッドの概要
Console.ReadKeyメソッド
は、コンソールアプリケーションでユーザーからのキー入力を取得するためのメソッドです。
このメソッドは、ユーザーがキーを押すまでプログラムの実行を一時停止し、押されたキーに関する情報を含むConsoleKeyInfo
オブジェクトを返します。
これにより、特定のキーが押されたかどうかを判断することができます。
サンプルコードは以下の通りです。
using System;
class Program
{
static void Main()
{
Console.WriteLine("任意のキーを押してください...");
// キー入力を待機
ConsoleKeyInfo keyInfo = Console.ReadKey();
// 押されたキーを表示
Console.WriteLine($"\n押されたキー: {keyInfo.KeyChar}");
}
}
任意のキーを押してください...
押されたキー: A // 例としてAキーを押した場合
ConsoleKeyInfoオブジェクトの取得
Console.ReadKeyメソッド
が返すConsoleKeyInfo
オブジェクトには、押されたキーに関する詳細情報が含まれています。
このオブジェクトを使用することで、押されたキーの文字、キーコード、修飾キーの状態を確認することができます。
以下のサンプルコードでは、ConsoleKeyInfo
オブジェクトを使用して、押されたキーの情報を取得し表示します。
using System;
class Program
{
static void Main()
{
Console.WriteLine("任意のキーを押してください...");
// キー入力を待機
ConsoleKeyInfo keyInfo = Console.ReadKey();
// 押されたキーの情報を表示
Console.WriteLine($"\n押されたキー: {keyInfo.KeyChar}");
Console.WriteLine($"キーコード: {keyInfo.Key}");
Console.WriteLine($"Shiftキーが押されているか: {keyInfo.Modifiers.HasFlag(ConsoleModifiers.Shift)}");
}
}
任意のキーを押してください...
押されたキー: B
キーコード: B
Shiftキーが押されているか: False
キー入力の表示と非表示の切り替え
Console.ReadKeyメソッド
には、引数としてtrue
またはfalse
を指定することができます。
true
を指定すると、押されたキーがコンソールに表示されず、false
を指定すると表示されます。
これにより、ユーザーの入力を隠すことができます。
以下のサンプルコードでは、キー入力を非表示にする方法を示します。
using System;
class Program
{
static void Main()
{
Console.WriteLine("任意のキーを押してください(表示されません)...");
// キー入力を待機(表示しない)
ConsoleKeyInfo keyInfo = Console.ReadKey(true);
// 押されたキーを表示
Console.WriteLine($"\n押されたキー: {keyInfo.KeyChar}");
}
}
任意のキーを押してください(表示されません)...
押されたキー: C // 例としてCキーを押した場合
ConsoleKeyInfoオブジェクトの詳細
キーコードの取得方法
ConsoleKeyInfo
オブジェクトには、押されたキーの情報が含まれています。
その中でも、Key
プロパティを使用することで、押されたキーのキーコードを取得できます。
キーコードは、ConsoleKey
列挙体の値として表現され、特定のキーを識別するために使用されます。
以下のサンプルコードでは、押されたキーのキーコードを取得し、表示します。
using System;
class Program
{
static void Main()
{
Console.WriteLine("任意のキーを押してください...");
// キー入力を待機
ConsoleKeyInfo keyInfo = Console.ReadKey();
// 押されたキーのキーコードを表示
Console.WriteLine($"\n押されたキーのキーコード: {keyInfo.Key}");
}
}
任意のキーを押してください...
押されたキーのキーコード: A // 例としてAキーを押した場合
修飾キーの判定
ConsoleKeyInfo
オブジェクトには、押されたキーに加えて、修飾キー(Shift、Ctrl、Altなど)の状態も含まれています。
Modifiers
プロパティを使用することで、どの修飾キーが押されているかを判定できます。
これにより、特定のキーの組み合わせに応じた処理を実装することが可能です。
以下のサンプルコードでは、Shiftキーが押されているかどうかを判定し、その結果を表示します。
using System;
class Program
{
static void Main()
{
Console.WriteLine("任意のキーを押してください...");
// キー入力を待機
ConsoleKeyInfo keyInfo = Console.ReadKey();
// 修飾キーの状態を判定
bool isShiftPressed = keyInfo.Modifiers.HasFlag(ConsoleModifiers.Shift);
bool isCtrlPressed = keyInfo.Modifiers.HasFlag(ConsoleModifiers.Control);
bool isAltPressed = keyInfo.Modifiers.HasFlag(ConsoleModifiers.Alt);
// 判定結果を表示
Console.WriteLine($"\nShiftキーが押されているか: {isShiftPressed}");
Console.WriteLine($"Ctrlキーが押されているか: {isCtrlPressed}");
Console.WriteLine($"Altキーが押されているか: {isAltPressed}");
}
}
任意のキーを押してください...
A
Shiftキーが押されているか: True
Ctrlキーが押されているか: False
Altキーが押されているか: True
入力された文字の取得
ConsoleKeyInfo
オブジェクトのKeyChar
プロパティを使用することで、押されたキーに対応する文字を取得できます。
このプロパティは、通常の文字キーが押された場合に、その文字を返します。
特定のキー(例えば、ファンクションキーや矢印キーなど)については、KeyChar
は空の文字を返します。
以下のサンプルコードでは、押されたキーの文字を取得し、表示します。
using System;
class Program
{
static void Main()
{
Console.WriteLine("任意のキーを押してください...");
// キー入力を待機
ConsoleKeyInfo keyInfo = Console.ReadKey();
// 押されたキーの文字を表示
Console.WriteLine($"\n押されたキーの文字: {keyInfo.KeyChar}");
}
}
任意のキーを押してください...
押されたキーの文字: D // 例としてDキーを押した場合
キー入力を用いた基本的なプログラム
単一キー入力の処理
単一キー入力の処理は、ユーザーが1つのキーを押したときにその入力を受け取り、特定のアクションを実行する基本的な方法です。
Console.ReadKeyメソッド
を使用して、ユーザーの入力を待機し、押されたキーに応じた処理を行います。
以下のサンプルコードでは、ユーザーが押したキーに応じて異なるメッセージを表示します。
using System;
class Program
{
static void Main()
{
Console.WriteLine("AまたはBキーを押してください...");
// キー入力を待機
ConsoleKeyInfo keyInfo = Console.ReadKey();
// 押されたキーに応じた処理
if (keyInfo.KeyChar == 'A' || keyInfo.KeyChar == 'a')
{
Console.WriteLine("\nAキーが押されました。");
}
else if (keyInfo.KeyChar == 'B' || keyInfo.KeyChar == 'b')
{
Console.WriteLine("\nBキーが押されました。");
}
else
{
Console.WriteLine("\nAまたはB以外のキーが押されました。");
}
}
}
AまたはBキーを押してください...
Aキーが押されました。 // 例としてAキーを押した場合
複数キーの連続入力処理
複数キーの連続入力処理では、ユーザーが複数のキーを順番に押すことを想定し、それに応じた処理を行います。
ループを使用して、ユーザーが特定のキーを押すまで入力を受け付け続けることができます。
以下のサンプルコードでは、ユーザーが押したキーを連続して表示し、Escキーが押されるまで続けます。
using System;
class Program
{
static void Main()
{
Console.WriteLine("キーを押してください。Escキーで終了します。");
while (true)
{
// キー入力を待機
ConsoleKeyInfo keyInfo = Console.ReadKey(true);
// Escキーが押された場合、ループを終了
if (keyInfo.Key == ConsoleKey.Escape)
{
Console.WriteLine("\n終了します。");
break;
}
// 押されたキーを表示
Console.WriteLine($"押されたキー: {keyInfo.KeyChar}");
}
}
}
キーを押してください。Escキーで終了します。
押されたキー: X // 例としてXキーを押した場合
押されたキー: Y // 例としてYキーを押した場合
終了します。
特殊キーの処理
特殊キー(ファンクションキーや矢印キーなど)の処理は、通常の文字キーとは異なる方法で行います。
ConsoleKeyInfo
オブジェクトのKey
プロパティを使用して、押された特殊キーを判定し、それに応じた処理を実行します。
以下のサンプルコードでは、矢印キーが押された場合にその方向を表示します。
using System;
class Program
{
static void Main()
{
Console.WriteLine("矢印キーを押してください。Escキーで終了します。");
while (true)
{
// キー入力を待機
ConsoleKeyInfo keyInfo = Console.ReadKey(true);
// Escキーが押された場合、ループを終了
if (keyInfo.Key == ConsoleKey.Escape)
{
Console.WriteLine("\n終了します。");
break;
}
// 矢印キーの処理
switch (keyInfo.Key)
{
case ConsoleKey.UpArrow:
Console.WriteLine("上矢印キーが押されました。");
break;
case ConsoleKey.DownArrow:
Console.WriteLine("下矢印キーが押されました。");
break;
case ConsoleKey.LeftArrow:
Console.WriteLine("左矢印キーが押されました。");
break;
case ConsoleKey.RightArrow:
Console.WriteLine("右矢印キーが押されました。");
break;
default:
Console.WriteLine("矢印キー以外が押されました。");
break;
}
}
}
}
矢印キーを押してください。Escキーで終了します。
上矢印キーが押されました。 // 例として上矢印キーを押した場合
右矢印キーが押されました。 // 例として右矢印キーを押した場合
終了します。
応用例:キー入力を用いたインタラクティブなコンソールアプリケーション
簡易メニューの実装
簡易メニューを実装することで、ユーザーが選択肢から操作を選ぶことができるインタラクティブなコンソールアプリケーションを作成できます。
Console.ReadKeyメソッド
を使用して、ユーザーの入力を受け取り、選択されたメニューに応じた処理を実行します。
以下のサンプルコードでは、簡単なメニューを表示し、ユーザーが選択したオプションに応じてメッセージを表示します。
using System;
class Program
{
static void Main()
{
while (true)
{
Console.WriteLine("メニュー:");
Console.WriteLine("1: オプション1");
Console.WriteLine("2: オプション2");
Console.WriteLine("3: 終了");
Console.Write("選択してください: ");
// キー入力を待機
ConsoleKeyInfo keyInfo = Console.ReadKey(true);
// 選択されたオプションに応じた処理
switch (keyInfo.KeyChar)
{
case '1':
Console.WriteLine("オプション1が選択されました。");
break;
case '2':
Console.WriteLine("オプション2が選択されました。");
break;
case '3':
Console.WriteLine("終了します。");
return; // プログラムを終了
default:
Console.WriteLine("無効な選択です。");
break;
}
}
}
}
メニュー:
1: オプション1
2: オプション2
3: 終了
選択してください: 1
オプション1が選択されました。
ゲームの操作入力
ゲームの操作入力では、ユーザーがキーボードを使ってキャラクターを操作することができます。
矢印キーや特定のキーを使用して、キャラクターの動きを制御します。
以下のサンプルコードでは、ユーザーが矢印キーを押すことでキャラクターの位置を変更する簡単なゲームの例を示します。
using System;
class Program
{
static void Main()
{
int positionX = 0;
int positionY = 0;
Console.WriteLine("キャラクターを操作します。矢印キーで移動、Escキーで終了します。");
while (true)
{
// キー入力を待機
ConsoleKeyInfo keyInfo = Console.ReadKey(true);
// Escキーが押された場合、ループを終了
if (keyInfo.Key == ConsoleKey.Escape)
{
Console.WriteLine("\n終了します。");
break;
}
// 矢印キーの処理
switch (keyInfo.Key)
{
case ConsoleKey.UpArrow:
positionY++;
break;
case ConsoleKey.DownArrow:
positionY--;
break;
case ConsoleKey.LeftArrow:
positionX--;
break;
case ConsoleKey.RightArrow:
positionX++;
break;
default:
Console.WriteLine("無効なキーです。");
continue; // 無効なキーはスキップ
}
// 現在の位置を表示
Console.WriteLine($"キャラクターの位置: ({positionX}, {positionY})");
}
}
}
キャラクターを操作します。矢印キーで移動、Escキーで終了します。
キャラクターの位置: (0, 1) // 上矢印キーを押した場合
キャラクターの位置: (1, 1) // 右矢印キーを押した場合
終了します。
テキストエディタの基本機能
テキストエディタの基本機能を実装することで、ユーザーがテキストを入力し、編集することができるアプリケーションを作成できます。
ここでは、簡単なテキストエディタの機能を実装し、ユーザーが入力したテキストを表示します。
以下のサンプルコードでは、ユーザーが入力した文字を表示し、Escキーで終了する簡単なテキストエディタの例を示します。
using System;
using System.Text;
class Program
{
static void Main()
{
StringBuilder text = new StringBuilder();
Console.WriteLine("テキストを入力してください。Escキーで終了します。");
while (true)
{
// キー入力を待機
ConsoleKeyInfo keyInfo = Console.ReadKey(true);
// Escキーが押された場合、ループを終了
if (keyInfo.Key == ConsoleKey.Escape)
{
Console.WriteLine("\n終了します。");
break;
}
// 入力された文字を追加
text.Append(keyInfo.KeyChar);
Console.Write(keyInfo.KeyChar); // 入力された文字を表示
}
// 最終的なテキストを表示
Console.WriteLine($"\n入力されたテキスト: {text.ToString()}");
}
}
テキストを入力してください。Escキーで終了します。
Hello World! // 例として `Hello World!` と入力した場合
終了します。
入力されたテキスト: Hello World!
まとめ
この記事では、C#のコンソールアプリケーションにおけるキー入力の取得方法について詳しく解説しました。
具体的には、Console.ReadKeyメソッド
を使用した基本的なキー入力の処理から、応用例として簡易メニューやゲームの操作入力、テキストエディタの基本機能まで幅広く取り上げました。
これらの知識を活用して、インタラクティブなコンソールアプリケーションを作成することができるでしょう。
ぜひ、実際にコードを試してみて、さまざまな機能を実装してみてください。