- - PR -
KeyDownとLeaveイベントの併用
1
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2006-10-03 20:37
VS2005 win xp windowsフォーム
いつもお世話になっております。 現状、テキストボックスのKeyDownイベントで、次のコントロールに行かせようとしています。 If e.KeyCode = Keys.Enter Then Me.SelectNextControl(Me.ActiveControl, True, True, True, True) End If また、同じテキストボックスのLaeveイベントで、SQLでデータ抽出をおこなっております。 入力されて、enterを押下したら、抽出するという形になっています。 また、マウスでアクティブコントロールを離れた際とかも踏まえて、抽出の処理はLaeveイベントにいれております。 そのときに、もしデータベース抽出で、範囲外(登録外)だった場合には、前のアクティブコントロールに戻す処理をいれているのですが、そうすると、 次のコントロールに進む→"登録されていません"msg→前のコントロールに戻るという形になってしまいます。 見た目がそうなってしまうので、どうにか回避したいのですが・・・ Validatedのイベントでもやってみたのですが、同じ結果でした。 もし、違う方法とかがありましたら、ご教授お願いいたします。 | ||||
|
投稿日時: 2006-10-03 20:45
検証なのですから、Validating イベントで行いましょう。 イベント引数により、フォーカス遷移をキャンセルすることも可能です。 _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||
|
投稿日時: 2006-10-03 21:15
じゃんぬねっとさん、返答ありがとうございます。
Validatingイベントとなると引数のsenderとかで、キャンセルする感じなのですかね!? 範囲外だったときに、Validatingイベント引数の CType(sender, *********).Focus()とかだと、キャンセルって意味合いではないですかね・・・ 実際、CType(sender, *********).Focus()で試した結果、フォーカスが次にいく→範囲外msg→元にもどるでした。 me.acticcontrol.nameが次のコントロールを示しているのですが、それでも、可能なのでしょうか!? キャンセルっていう、意味合いが違うのでしょうか!? 非力で申し訳ないのですが、ご教授お願いいたします。 | ||||
|
投稿日時: 2006-10-03 21:35
sender イベント引数は、イベントの発生元以外の何者でもありません。 sender ではありませんから、これ以降のすべての文章が間違っています。 Cancel したいのに、Cancel 専用のイベント引数を無視してはいけないでしょう。 _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||
|
投稿日時: 2006-10-03 22:16
じゃんぬねっとさん、返答ありがとうございます。
e.cancel = true ですよね。 それも試していました。でも、できなかったので、違うのかなっと思ってしまいました。 いろいろ検証した結果、データ抽出で、少し時間のロス(ほんとに少しなのですが・・・)があるみたいで、そのせいで、次のコントロールに一瞬フォーカスが移動したようにみえるみたいです。 データ抽出をいったんコメントアウトをしましたら、次のコントロールにフォーカスがあたることは、ありませんでした。 そうなると、違うやりかたで、フォーカスを送らないとだめですよね。 もうちょっと、いろいろ行ってみます。 | ||||
|
投稿日時: 2006-10-04 01:04
若干コードが汚くなりますが、以下の方法で解決できのではないでしょうか?
抽出条件となるテキストボックスをtxtHoge、 SQLでのデータ抽出処理をgetFugaメソッド(戻り値に抽出成功/失敗を示すBoolean値を持たせる)としたとき、 Leaveイベント(ValidatingでもOK)内で、 If e.KeyCode = Keys.Enter Then If getFuga() Then Me.SelectNextControl(Me.ActiveControl, True, True, True, True) Else Me.txtHoge.Focus() End If | ||||
|
投稿日時: 2006-10-04 09:14
Leave イベント、Validating イベントに、KeyEventArgs イベント引数はないと思いますが... _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||
|
投稿日時: 2006-10-04 09:56
dothefesさん、じゃんぬねっとさん返答ありがとうございます。
いろいろ試した結果、 txt1 txt2がある状態でtxt1に入力を行い、正常だったらtxt2に、範囲外msgを出す前に、txt1.focusをいれてあげると、次のコントロールでフォーカスが移動した後、元に戻るという現象が直りました。 msgboxを出した後だと、txt2に一瞬移動しちゃうんですかね・・・ もうすこし、検証してみます。 |
1