- PR -

矢印キーイベントの取得(Web・Win共に)について

1
投稿者投稿内容
だい
常連さん
会議室デビュー日: 2004/08/03
投稿数: 22
投稿日時: 2004-08-03 14:27
VB.NETでのWeb・Winフォームでの
矢印キーイベントの取得の仕方がわからず困っております。

WebのほうはJavaScriptでの取得になると思いますが
実装方法がわからず・・・。

WinのほうもKeyDown等でのイベントが取得できないので
実装方法が分かりません・・。

どちらもメニュー画面として作成しておりますが
矢印キーにてフォーカス移動と移動の制限を実現したいのです。
どちらでも構いませんので実装方法を
ご教授お願いします。


一郎
ぬし
会議室デビュー日: 2002/10/11
投稿数: 1081
投稿日時: 2004-08-03 15:07
Windowsフォームの方に関しては、Control.IsInputKey()でtrueを返してはどうでしょう。
通常のキーとして処理されると思います。(試してませんが)
http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/cpref/html/frlrfsystemwindowsformscontrolclassisinputkeytopic.asp
だい
常連さん
会議室デビュー日: 2004/08/03
投稿数: 22
投稿日時: 2004-08-03 15:55
ご返答ありがとうございます。

早速 IsInputKeyメソッドを試してみました。

Click,GotFocus,LostFocusイベントで試してみたのですが

値をTrueで返してはくれませんでした。


Private Sub Button1_GotFocus(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1_GotFocus

If IsInputKey(Keys.Left) Then
MsgBox("矢印左が押されました")
End If

End Sub

申し訳ありませんが、なにかいい方法・修正点があれば
ご教授お願いいたします。
一郎
ぬし
会議室デビュー日: 2002/10/11
投稿数: 1081
投稿日時: 2004-08-03 16:04
あっ、すいません。

IsInputKey()はオーバーライドして、自分でtrueを返すんです。
矢印キーが特殊キーかどうかの確認を(内部処理として)されたときにtrueを返すようにしておくことによって特殊キーではないと思い込ませるわけです。
だい
常連さん
会議室デビュー日: 2004/08/03
投稿数: 22
投稿日時: 2004-08-03 17:05
一郎さん、ご返答ありがとうございます。

オーバーライドして自分でTRUEを返す事により
IsInputKeyで指定したキーを拾えました。

ですがやはりイベントで実装する際に
思った動作はしてくれませんでした。

結局は矢印キー押下時のKeyCodeを
IsInputKeyに与えてあげるイベントがないので
無理なようです。

自分でも色々と試してみます。

何度もありがとうございます。
なにかわかりましたら又宜しくお願い致します。
一郎
ぬし
会議室デビュー日: 2002/10/11
投稿数: 1081
投稿日時: 2004-08-03 18:41
引用:

だいさんの書き込み (2004-08-03 17:05) より:
IsInputKeyで指定したキーを拾えました。


???
「IsInputKeyでキーを拾う」というのはどういうことですか?

引用:

だいさんの書き込み (2004-08-03 17:05) より:
矢印キー押下時のKeyCodeを
IsInputKeyに与えてあげるイベントがないので


IsInputKeyは、そのキーがプリプロセス(前処理)が必要な特殊なキーかどうかを判定するのにプログラマの見えない内部で使用されます。
明示的に呼んだりはしません。

フォームにボタンを2つ貼り付けてください。
フォームのKeyPreviewをTrueにしてください。
実行して矢印キーを押してください。フォームのKeyDownは起きませんよね。
コード:
Public Class MyButton
    Inherits Button
    Protected Overrides Function IsInputKey(ByVal keyData As System.Windows.Forms.Keys) As Boolean
        If keyData = Keys.Up Or keyData = Keys.Down Or keyData = Keys.Left Or keyData = Keys.Right Then
            Return True
        Else
            Return MyBase.IsInputKey(keyData)
        End If
    End Function
End Class


次は、貼り付けたボタンを消して、代わりにこのMyButtonを貼り付けてください。
実行して矢印キーを押してください。フォームのKeyDownが起きませんか?
だい
常連さん
会議室デビュー日: 2004/08/03
投稿数: 22
投稿日時: 2004-08-03 19:28
一郎さん。ご返答ありがとうございます。

引用:
--------------------------------------------------------------------------------
一郎さんの書き込み (2004-08-03 18:41) より:

IsInputKeyは、そのキーがプリプロセス(前処理)が必要な特殊なキーかどうかを判定するのにプログラマの見えない内部で使用されます。
明示的に呼んだりはしません。

--------------------------------------------------------------------------------

すいません明示的に呼び出して使用してました。

一郎さんの手順どうりで
矢印キーのKeyDownイベント発生しました(^0^)
一郎さん
本当にありがとうございます。
何度も申し訳ありませんでした。






1

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