- - PR -
KeyUp」イベントでエンター押下は実行したくない
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2009-01-21 19:54
Vb.Netですが、DataGridViewの「KeyUp」イベントでメッセージボックスのエンター押下時には実行させたくないのですが(プログラム内ではじくとか…)、やり方御存知の方いましたら教えてくださいm(__)m
| ||||
|
投稿日時: 2009-01-22 01:19
申し訳ないのですが、本題 (太字) の部分の意味がわかりません。 申し訳ありませんが、もう少し丁寧に詳しく多くの方が読めるように書いて頂けないでしょうか? 頑張って読み取ろうとした結果、'DataGridView の (Cell の?) KeyUp イベントで MessageBox を表示しているところがあるのですが、Enter キーの場合は表示したくありません。 Enter キーの場合だけ表示させないようにできますか?' という内容ではないかと思ったのですが、これだと 「Enter キー以外は MessageBox を表示する」 ということになりますので (あまりにユーザビリティが低すぎて) あり得ない、私のこの読みは間違いであろうと判断しました。 _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||
|
投稿日時: 2009-01-22 09:31
外してるかもしれませんが、そのメッセージボックスって、
Windows 標準のメッセージボックスじゃなくて、自作のフォームですか? | ||||
|
投稿日時: 2009-01-22 09:49
私はニュータイプではないので外しているかもしれませんが、
もしかして↓のスレッドでおこなったことが絡んでたりするのでしょうかね? http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=47958&forum=7 | ||||
|
投稿日時: 2009-01-22 09:57
すいませんわかりづらくて。
DataGridView 自体の KeyUp イベントでメッセージボックスを表示しているところがあるのですが、そのメッセージボックスが表示されEnterで「OK」を押すと、またDataGridViewの KeyUp イベントが走ってしまうのです。(当然マウスでOKをクリックするとこの現象は起きません。) EnterでOKし続けると永久ループに入ってしまいます | ||||
|
投稿日時: 2009-01-22 11:21
これでどうでしょう。
Private Sub test(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles GridView.KeyUp If e.KeyCode <> Keys.Enter Then MsgBox("TEST") End If End Sub | ||||
|
投稿日時: 2009-01-22 12:07
よかったら、このあたりの事情(KeyUp イベント内での処理や、メッセージの内容とか)を詳しく教えてもらえないでしょうか。 というのは、私の感覚だと「DataGridView 自体の KeyUp のタイミングでメッセージボックスを出す」という仕様はありえないんで…。 なんとなく入力エラーを表示しているのかなと推測しましたが、その場合はメッセージボックスではなく、画面の別の場所で通知するなどして、ユーザの操作を邪魔しない方法を(私なら)選ぶと思いますし…。 | ||||
|
投稿日時: 2009-01-22 12:41
>ぬしさん
回答ありがとうございます^^ その通り、エンター押下時にカレントセルの入力チェックをしてエラーだった場合にメッセージボックスを表示させています。 ※ちなみにセルの編集状態からEnterを押してもKeyDownイベントでは拾ってくれないのでKeyUpイベントにも入力チェック処理が入っています。 こんな感じです↓ Private Sub DataGridView_KeyUp(ByVal sender As System.Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles DataGridView.KeyUp If e.KeyCode = Keys.Enter Then Select Case DataGridView.CurrentCell.ColumnIndex Case prConColIdxShohinCD ret = CheckShohinCode(DataGridView.Item(prConColIdxShohinCD, DataGridView.CurrentCell.RowIndex).Value) If ret = False Then MsgBox("商品コードを正しく入力して下さい。", vbCritical) DataGridView.Focus() DataGridView.CurrentCell = DataGridView(prConColIdxShohinCD, DataGridView.CurrentCell.RowIndex) Exit Sub End If End Select End If End Sub 元のプログラムはAccessでVb.Netで作り直してるのですが、(ある事情で)全く同じ動きにしなければならず、元プログラム通りにメッセージボックスでエラーを通知したいのですが…。 ※タイトルや最初の質問見ても意味分からないですね。混乱させた皆様すみませんでしたm(__)m |