No.1ベストアンサー
- 回答日時:
こんばんは。
SendKeyで送るよりも、TextChangedイベントで二重入力対象の文字をテキストボックスに追加する手段を取った方が良さそうです。
TextChanged内でテキストボックスに向かってテキストを設定すると、再びTextChangedイベントが呼ばれてしまうので、フラグを設けてスキップするようにします。
二重入力対象の文字を追加した後は、キャレットの位置を自前で正しい位置に設定する必要があります。
更にKeyPressイベントで、二重入力対象の文字であるかどうかを判断します。それ以外ならば、何もさせずにOSに処理をさせます。
本来、テキストボックスへの入力に横槍を入れる事は、望ましくない事です。
例えば、スペースやバックスペースも含まれる為、プログラム内で迂闊にキー入力を抑止すると、文字の削除が出来なくなったりするので、思った以上に入念な確認をする必要があるからです。
以下は参考程度に。
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
private bool bDoubleInput = true;
public Form1()
{
InitializeComponent();
}
private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
{
//二重入力の対象文字
string sDoubleInput = "abcdefghijklmnopqrstuvwxyz0123456789";
foreach (Char ch in sDoubleInput)
{
if (ch == e.KeyChar)
{
this.bDoubleInput = true;
return;
}
}
//二重入力の対象ではない
this.bDoubleInput = false;
}
private void textBox1_TextChanged(object sender, EventArgs e)
{
//二重入力の対象ではないので引き返す
if (this.bDoubleInput == false)
{
this.bDoubleInput = true;
return;
}
//再起を防ぐ為にフラグを落とす
this.bDoubleInput = false;
//キャレットの元の位置を確保する
int tmp = this.textBox1.SelectionStart;
int idx = tmp - 1;
//二重入力の位置は文字列の末尾なので追加
if (this.textBox1.Text.Length == this.textBox1.SelectionStart)
{
this.textBox1.Text += this.textBox1.Text[idx].ToString();
}
else//二重入力の位置は文字列の末尾以外なので挿入
{
this.textBox1.Text = this.textBox1.Text.Insert(idx, this.textBox1.Text[idx].ToString());
}
//文字を追加・挿入したのでキャレットの新しい位置を設定する
this.textBox1.SelectionStart = tmp + 1;
}
}
}
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- マウス・キーボード テンキーの設定がおかしくなっています。 5 2023/08/09 15:35
- その他(IT・Webサービス) Google日本語入力の操作方法 一度確定した後の訂正方法 1 2023/06/17 16:03
- Windows 10 MicrosoftIMEでトラブル、助けてください m(_._)m 4 2023/05/16 14:11
- Access(アクセス) capeofdragonと申します。 Access2016を使っております。 あるフォームがあり、テ 2 2022/09/09 13:18
- C言語・C++・C# C#テキストボックスの文字を配列にいれてその後表示する 4 2022/07/17 04:47
- マウス・キーボード パソコンの外付けキーボードについて ノートパソコンて外付けキーボードを使用すると、入力うまく行きませ 4 2023/01/04 23:02
- JavaScript HTMLでJavaScriptを使用してプログラムを作ります。 入力されたパスワードを取得して、パス 2 2022/10/18 01:05
- Visual Basic(VBA) ActiveReportのdetailをデータセットの自動バインドを使って帳票を出力しています。 1 2023/08/16 07:16
- IT・エンジニアリング ActiveReportのdetailをデータセットの自動バインドを使って帳票を出力しています。 1 2023/08/16 07:17
- Mac OS iMac27(2010)のbootcamp 下の Windows で ディスプレー外部入力を 受ける 4 2023/07/25 18:57
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
プログラミング初心者です。 Py...
-
MinGWのC言語でCTRL+Zで処理が...
-
enterでループ終了
-
キーイベントに関してなのです...
-
double型が正常に認識されてい...
-
ワードで文字を入力する時の変...
-
scanfが2回使えない・・・?;
-
C言語scanf_sで何故か2回入力に...
-
c言語 ボタン入力のプログラム...
-
scanf("%s", buf);でスペースを...
-
入力されたとき,何も入力しな...
-
UWSCで変数をキー入力
-
Yesならこっちへ、NOなら...
-
ザウルスSL-C860上での{}の入力
-
漢字のソートについて
-
cin.get(c)について
-
applescript システム環境設定...
-
時間の判断
-
VusialBasic2010 コンソールア...
-
C言語の文字列の長さを計算し表...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
*をユーザーが入力した数字の数...
-
正負を反転させて出力するプロ...
-
数字以外が入力されたらエラー...
-
プログラミング初心者です。 Py...
-
java初心者です。入力されたの...
-
プログラミングの問題です 「金...
-
Eclipseコンソール表示を、リセ...
-
C言語 逆ピラミッドの作り方
-
"scanf"でエンターで改行させな...
-
scanf が無視されます
-
if文の条件にscanf関数を使うと…?
-
C言語について
-
C言語scanf_sで何故か2回入力に...
-
Excel VBAで、Application.Inpu...
-
double型が正常に認識されてい...
-
cout関数を使っているのですが...
-
小数か整数かを判定する方法
-
C言語でgetchar();が上手く使え...
-
WindowsでEOF
-
scanfが2回使えない・・・?;
おすすめ情報