Visual Studio等でC#を使用してGUIアプリケーションを作成する場合に使用するTextBoxの説明です。
TextBoxで入力文字(数値・実数・カタカナ・ひらがな・全角文字・半角文字 など)制御をする際の例を記載します。
文字列制御関数
入力文字の制御を行いたい文字列の列挙体 InputTextType を作成します。以下の列挙体は例ですので、制御した文字列項目を追加作成して下さい。(列挙体を作成するのは汎用性をもたせるためです)
1 2 3 4 5 6 7 8 9 10 11 12 |
//入力文字列種別列挙体 public enum InputTextType : short { // 文字(チェックなし) String, // 整数値 Digit, // 全角カタカナ Katakana, } |
特定の文字列に含まれる文字(整数文字・全角カタカナ・TELなど)を判断する関数CheckChar()
特定の文字列を判断する関数CheckString()
を作成します。(文字チェック関数・文字列チェック関数を作成するのは、汎用性を持たせるためです)
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 |
//文字のチェックをします。 static public bool CheckChar(char c, InputTextType mode) { bool bc = false; switch (mode) { case InputTextType.Digit: bc = IsHalfDigit(c); break; case InputTextType.Katakana: bc = IsDblKatakana(c); break; default: break; } return (bc); } //文字列のチェックをします。 static public bool CheckString(string s, InputTextType mode) { bool bc = false; switch (mode) { case InputTextType.Digit: bc = IsHalfDigitStr(s); break; case InputTextType.Katakana: bc = IsDblKatakanaStr(s); break; default: break; } return (bc); } |
※文字と文字列を判断する関数等の例(IsHalfDigit・IsHalfDigitStr関数等は特定文字の判断をご覧ください)
半角数値入力制御の例
TextBoxの入力制御は、Enter・Leave・KeyPress・KeyDownイベントで制御します。
EnterとLeaveではおもに、[ENTER]キーではなく、マウスでフォーカス移動された時のために処理しています。
KeyPressでは、特定文字列に含まれる文字以外は、入力出来ないようにしています。
KeyDownでは、[ENTER]キーを押された場合と、特殊キー(ESC・↑・↓)の処理をしています。
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 41 42 43 44 45 46 47 48 49 50 51 52 53 54 |
private void textBox1_Enter(object sender, EventArgs e) { ((TextBox)sender).ClearUndo(); ((TextBox)sender).SelectAll(); } private void textBox1_Leave(object sender, EventArgs e) { ((TextBox)sender).Undo(); } private void textBox1_KeyPress(object sender, KeyPressEventArgs e) { if (e.KeyChar == '\b') { return; } if (!CheckChar(e.KeyChar, InputTextType.Digit)) { e.Handled = true; } } private void textBox1_KeyDown(object sender, KeyEventArgs e) { switch (e.KeyCode) { case Keys.Up: this.ProcessTabKey(false); break; case Keys.Down: this.ProcessTabKey(true); break; case Keys.Tab: e.Handled = false; break; case Keys.Escape: ((TextBox)sender).Undo(); ((TextBox)sender).ClearUndo(); break; case Keys.Enter: bool bc = CheckString(((TextBox)sender).Text, InputTextType.Digit); if (bc) { ((TextBox)sender).ClearUndo(); this.ProcessTabKey(true); e.Handled = false; } break; default: break; } } |
CheckChar()・とCheckString()のInputTextType列挙体の値を変えることにより入力文字列を制御できます。
以上TextBoxでの入力制御の方法の例です。
※ちなみに以上の制御では、クリップボードによるコピーは避けられません。