前回はタッチタイプ練習ソフトをつくりました。
タッチタイプ練習ソフトをつくる
またこの動画では、
T → R → G → F → B → V
B → V → F → G → R → T
F → B → V → T → R → G
G → V → R → B → T → F
B → T → F → R → G → V
のような練習をしています。ランダムにお題を表示するのではなく、決められた順番でエンドレスでお題を表示する機能を追加することにします。また複数のファイルを登録して練習できるような機能を追加することにします。
デザイナをつかってコントロールを追加。
「ファイルに登録された文字を使用する」と書かれているチェックボックスがオンにされたら、「ファイルを読み込む」というボタンを有効にして、それ以外のチェックボックスは無効にします。「ファイルに登録された文字を使用する」と書かれているチェックボックスがオフにされたら逆の処理をおこないます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 |
private void checkBoxUseFileData_CheckedChanged(object sender, EventArgs e) { List<NoFocusedCheckBox> boxes = new List<NoFocusedCheckBox>(); boxes.AddRange(boxesFirst); boxes.AddRange(boxesSecond); boxes.AddRange(boxesThird); boxes.AddRange(boxesFourth); boxes.Add(this.checkBoxFirst); boxes.Add(this.checkBoxSecond); boxes.Add(this.checkBoxThird); boxes.Add(this.checkBoxFourth); boxes.Add(this.checkBoxLeftLittleFinger); boxes.Add(this.checkBoxLeftRingFinger); boxes.Add(this.checkBoxLeftMiddleFinger); boxes.Add(this.checkBoxLeftIndexFingerOutside); boxes.Add(this.checkBoxLeftIndexFingerInside); boxes.Add(this.checkBoxRightIndexFingerInside); boxes.Add(this.checkBoxRightIndexFingerOutside); boxes.Add(this.checkBoxRightMiddleFinger); boxes.Add(this.checkBoxRightRingFinger); boxes.Add(this.checkBoxRightLittleFinger); boxes.Add(this.checkBoxRightLittleFinger2); boxes.Add(this.checkBoxRightLittleFinger3); if (checkBoxUseFileData.Checked) { foreach (var box in boxes) { box.Enabled = false; noFocusedButtonReadFile.Enabled = true; } } else { foreach (var box in boxes) { box.Enabled = true; noFocusedButtonReadFile.Enabled = false; } } } |
そして、「ファイルを読み込む」というボタンがクリックされたら、ファイルを読み込み、読み込んだ文字をリストに格納します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
List<char> chars2 = new List<char>(); // フォールド変数 private void noFocusedButtonReadFile_Click(object sender, EventArgs e) { OpenFileDialog openFileDialog = new OpenFileDialog(); openFileDialog.Filter = "テキストファイル (*.txt)|*.txt"; openFileDialog.InitialDirectory = Application.StartupPath; var dr = openFileDialog.ShowDialog(); if (dr == DialogResult.OK) { System.IO.StreamReader sr = new System.IO.StreamReader(openFileDialog.FileName); string str = sr.ReadToEnd(); chars2.Clear(); chars2 = str.ToList(); } } |
「ファイルに登録された文字を使用する」というチェックボックスがオンかオフかでお題が変わるので、ShowNextメソッドは書き換えになります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
void ShowNext() { if (!checkBoxUseFileData.Checked) ShowNext1(); else ShowNext2(); } void ShowNext1() { if (chars.Count == 0) return; int i = random.Next(chars.Count); label1.Text = chars[i].ToString(); ShowNavi(chars[i]); } int chars2Index = 0; // フォールド変数 void ShowNext2() { if (chars2.Count == 0) return; label1.Text = chars2[chars2Index].ToString(); ShowNavi(chars2[chars2Index]); chars2Index++; if (chars2Index >= chars2.Count) chars2Index = 0; } |
フィールド変数をつかって、エンドレスで出題されるようにしています。
OpenFileDialog.InitialDirectoryプロパティからわかるように、ファイルはお題が書かれたテキストファイルは実行ファイルがあるフォルダに保存されているという前提になっています。ボタンをクリックすることで実行ファイルがあるフォルダを簡単に開くことができるようにします。
1 2 3 4 |
private void buttonOpenFolder_Click(object sender, EventArgs e) { System.Diagnostics.Process.Start(Application.StartupPath); } |