- PR -

TextBoxにデータを入力後、発生するイベントは?

投稿者投稿内容
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2007-11-12 05:52
となりますと、既出のように KeyDown イベントあたりで良さそうですね。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2007-11-12 07:42
引用:

だんじりさんの書き込み (2007-11-11 17:27) より:
現在、Visual Basic 2005 Express Edition でWindowsアプリケーションを 開発してい
ます。大変初歩的な質問ですが「入力後」「イベント」で過去ログを探しても見つかり
ませんので質問します。

数値の入力用テキストボックスで、入力確定後(Entterキー後)に、ある処理を行いた
く、該当するイベントを探しています。

次のイベントについてテストしましたが、それぞれイベント発生内容と時期が希望に
該当しません。
1.TextBox_Enter:フォーカス取得時に2回イベントが発生します。
2.TextBox_Leave:入力後には何も発生しません。
3.TextBox_EnabledChanged:フォーカス取得時に1回発生します
4.TextBox_TextChanged:フォームLoad時と1文字入力毎にイベントが発生し、


1.そうですか?2回というのが、変

2.leaveなので、フォーカスを失ったときに発生します

3.なぜ?1とあわせて、何か細工していませんか?

4.Textプロパティの内容が変わった時に発生するので、その挙動で正常です。

引用:

Enterキーで確定後は発生しません。


Enterはフォームにある規定のボタンに割り当てられています。なので、そのボタンのクリックイベントが発生するでしょう。


目的のものは、Validating イベントではないかとおもわれます
まどか
ぬし
会議室デビュー日: 2005/09/06
投稿数: 372
お住まい・勤務地: ますのすし管区
投稿日時: 2007-11-12 09:09
引用:

Enterはフォームにある規定のボタンに割り当てられています。なので、そのボタンのクリックイベントが発生するでしょう。
目的のものは、Validating イベントではないかとおもわれます



AcceptButtonプロパティが設定されていれば、ですよね。
もしかして別スレからの流れで周知の事実として書かれたのでしょうか。
いずれにしても、ちょっと混乱するなと思い書かせていただきました。
よねKEN
ぬし
会議室デビュー日: 2003/08/23
投稿数: 472
投稿日時: 2007-11-12 09:23
引用:

だんじりさんの書き込み (2007-11-11 21:13) より:

なれ親しんだ[Enter]キーは、文字入力して、これで確定する場合に押していたもので
すから、ついEnterキー = 確定と表現してしまい皆様方には誤って伝わってしまったこ
とを深くお詫び申し上げます。



誤って伝わったのであれば、お詫びよりもまず先に
正しく意図を伝えるべきだと思います。Enterキー押下により何をしたいのか?
が伝わってきません。何をしたいかによって使うべきイベントもおそらく異なります。
Enterキーを押下することで付随して、フォーカスが移動する、
入力チェックが行われる、などの処理が行われるのではないでしょうか?

Enterキーが押されたというタイミングを純粋に知りたいのであれば、
みなさんもおっしゃっているようにKeyDownイベントが該当するでしょう。

そうでなく、何度も出てきている「確定」という言葉どおりの意味合いがあるなら、
そこで何らかの入力チェックを行うためのイベントを探されているのではないでしょうか?
この場合、KeyDownイベントでの対応は適切と言えず、
Jittaさんが指摘されているようにValidatingイベント(とその関連イベント)が
使えるだろうと思います。
#マウスでもフォーカスは移動できますので、
#KeyDownイベントで入力チェックをしたのでは対応に漏れがでますから。
だんじり
大ベテラン
会議室デビュー日: 2007/08/10
投稿数: 155
お住まい・勤務地: 神奈川県
投稿日時: 2007-11-12 09:34
じゃんぬねっとさん、ありがとうございます。
すでに、まどかさんから指導いただいた「 KeyDown イベントあたりで良さそうでね。」
との事ですが、実験しますと1文字入力毎にイベントが発生し、なおかつ最後に「Enterキー」を押すとイベントが発生します。
このことは「イベント発生毎にTextBoxの入力文字を取得して、文字数が増えていたら
イベントを無効にする」処理を追加する必要がありますね。


Jittaさん、ありがとうございました。
私のテスト結果にコメントをいただけ大変助かりました。再度新しいフォームを作成し
テストしてみました。

1.そうですか?2回というのが、変 →フォーカス取得時に1回だけでした。
2.leaveなので、フォーカスを失ったときに発生します →TabIndex及びTabStopを
正常に設定しているのにタブが動作していなく見損じでした。
3.なぜ?1とあわせて、何か細工していませんか? →このTextBoxがleave_TextBoxの次に配置されていてEnabledChanged_TextBoxにフォーカスを移動させたときにleaveの
フォーカス喪失時イベントを読み違えていました。イベントは発生しません。

ご指導いただきましたValidating イベントについてもテストしてみました
1.Validating(コントロールが検証しているとき・・)→フォーカス喪失後に1回
2.Validated(コントロールが検証されカ後・・)→フォーカス喪失後に1回発生
3.VisibleChanged(コントロールの表示状態が変わったとき・・)→入力時は発生
しませんが、テスト用フォームを開いたときに次の順で2回イベントが発生します。
VisibleChangedイベント→TextChangedイベント→VisibleChangedイベント
※VisibleChangedイベントは私が関連あると思い追加しました。

Tab移動を設定している場合は、まどかさんやじゃんぬねっとさんから指導いただいた
「 KeyDown イベント」よりも「Validating」や「Leave」イベントの方が使いやすそう
ですが、もう少しテストしてみます。

ところで、Jittaさんに伺いたいのですがTab移動の設定はどのようにすればいいので
しょうか。TabIndex及びTabStopを設定してもtabが動作しません。(関連質問と考え、同じスレッドでの質問で申し訳ありません)
よろしくご指導下さい。

追加編集
その後、tab動作はEnterキーを押すことでは動作せず、Tabキーを押すことで動作する
ことが分りました。EnterキーにもTabキー同様の動作をさせる設定が出来るのでしょうか。

[ メッセージ編集済み 編集者: だんじり 編集日時 2007-11-12 10:22 ]

[ メッセージ編集済み 編集者: だんじり 編集日時 2007-11-12 10:37 ]
だんじり
大ベテラン
会議室デビュー日: 2007/08/10
投稿数: 155
お住まい・勤務地: 神奈川県
投稿日時: 2007-11-12 10:10
まどかさん、ご親切にありがとうございます。
私の力量ではなぜEnterイベントが2回発生しのか分らず、新しいフォームを作って
再テストしましたら1回の発生になりました。ありがとうございます。

よねKENさん、ありがとうございます。
私の質問は、下記の通りで
引用:

数値の入力用テキストボックスで、入力確定後(Enterキー後)に、ある処理を行いた
く、該当するイベントを探しています。



EnterキーはTextBoxに入力済みのデータを確定して入力手続きをするための働きと、
深く考慮することなく使っておりました。よねKENさんご指摘の通りマウスで
フォーカスが移動しても(Enterキーを押さなくても)入力処理がなされる事を確認
しました。またEnterには検証という作業が伴っているようで、何を検証しているのか
は、これから勉強します。
ありがとうございました。


Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2007-11-12 18:02
引用:

まどかさんの書き込み (2007-11-12 09:09) より:
引用:

Enterはフォームにある規定のボタンに割り当てられています。なので、そのボタンのクリックイベントが発生するでしょう。
目的のものは、Validating イベントではないかとおもわれます



AcceptButtonプロパティが設定されていれば、ですよね。


フォローありがとうございます。その通りです。
RUN
常連さん
会議室デビュー日: 2007/10/05
投稿数: 32
お住まい・勤務地: 東京都
投稿日時: 2007-11-12 19:54
引用:

だんじりさんの書き込み (2007-11-12 09:34) より:
すでに、まどかさんから指導いただいた「 KeyDown イベントあたりで良さそうでね。」
との事ですが、実験しますと1文字入力毎にイベントが発生し、なおかつ最後に「Enterキー」を押すとイベントが発生します。
このことは「イベント発生毎にTextBoxの入力文字を取得して、文字数が増えていたら
イベントを無効にする」処理を追加する必要がありますね。


これだけど、
引用:

まどかさんの書き込み (2007-11-11 19:37) より:
そもそもWindowsに入力確定という機能がありません。
Enterは単に改行という目に見えないコードを入力するひとつのキーでしかありません。


をちゃんと見てないのかな?
KeyDown イベントってのは、キーボードのいずれかのキーが押されたときに発生するイベントで、Enterキーが押された時に【のみ】発生するイベントでは【有りません】

MSDNはちゃんと読みましたか?
読んでいれば、KeyDown イベントの仕様がキーボードのいずれかのキーが押された時に発生する事がわかった筈です。
そして、まどかさんが
「Enterは単に改行という目に見えないコードを入力」と言っている事より、改行コードが入力された事を調べればよいと言う事もすぐに気が付く事ができると思います。

まずは、回答者が言われている事の意味をよく読んで理解されてはいかがでしょうか?

最後に、ここに書いた事は
引用:

だんじりさんの書き込み (2007-11-12 09:34) より:
その後、tab動作はEnterキーを押すことでは動作せず、Tabキーを押すことで動作する
ことが分りました。EnterキーにもTabキー同様の動作をさせる設定が出来るのでしょうか。


のヒントにもなると思います

スキルアップ/キャリアアップ(JOB@IT)