今回はタッチタイプ練習アプリを作ります。あえて作らなくてもいくらでもフリーで使えるものがありますが、自作してみることにします。

あとYouTubeの動画でも有益なものがあります。これがおすすめです。

まずは単純なものから

デザイナでこんなものをつくります。ラベルをふたつ貼り付けています。ここにお題を表示させ、キーが押されたら正しいかどうか判定して正解、不正解を表示するというものです。

KeyDownイベントではなく、ここではKeyPressイベントを利用します。

コンストラクタ内で

それからフィールド変数として配列を用意して

で、formが表示されたら

そして文字キーが押されたら

正しいキーが押されていたら「OK!」と表示して次のお題を出題、間違ってたら「Miss!」と表示させます。

これだけでは使い物にならないので、もうちょっと機能を持たせます。表示された文字がどの指で押すかわかるようにナビを表示させます。

q、a、zなら左手小指、qなら上から2段目、aなら三段目というように。

そこでフィールド変数として以下のような配列をつくり、

フォームにlabel3とlabel4を貼り付けて、ShowNaviというメソッドでナビゲーションを表示させます。

ところが、実際に「2段目 右手 人差し指(外側)」と表示されて、パッとキーを叩ける人はそもそも練習の必要はないのでは? 練習が必要な人は「2段目 右手 人差し指(外側)」と表示されても指が動きません。

一度に多くのことをやろうとするのが失敗の原因です。まずは左手小指だけとか、3段目のキーだけで練習してだんだん守備範囲を増やしていくやり方にしたほうがいいと思います。

そこでチェックボックスをつくってお題として表示される文字を限定します。

formにチェックボックスをそのまま貼り付けるとキーを押しても反応しなくなります。これはチェックボックスがフォーカスを持っていってしまうのでformではKeyPressイベントが発生しなくなるからです。

そこでフォーカスを持っていかないチェックボックスをつくります。そのためには

ついでにボタンも作りました。

デザイナで以下のように作り替えます。

としていたのは、配列ではなくリストに変更します。

あと、配列がリストに変更されたので、ShowNext()を一部変更します。

そして

チェックボックスがチェックされたら文字を追加し、チェックが外されたら文字を取り除きます。

最初はcharsのなかは空っぽです。チェックボックスにチェックをいれてスタートボタンを押すとお題が表示されるように変更しました。

あと、縦列、横列を同時に選択できると便利ですね。チェックボックスには3状態チェックボックスがあります。全部選択されているわけではないけど、すべて非選択になっているわけでもない。こんなときに使います。

チェックボックスの状態が変化したら他のチェックボックスの状態も変化させる必要があるのですが、それによってまたまた他のチェックボックスが変化して無限ループのような状態にならないように気をつける必要があります。