特定key取得イベントが発生しない

タグの編集
投稿者 茶封筒  (小学生) 投稿日時 2008/11/20 19:40:18
特定keyの取得イベントが発生しない。
anyKeyで特定しない場合はイベントが発生している。
VB2008無料版、Vista
とりあえず、VBを再インストールすることにした。
うたさん>情報を実行しましたが、反応ありませんでした。
コード
option strict on & offの条件
イベント内
if keys.keycode=keys.left then 
MsgBox("ok")
投稿者 うたひこ  (社会人) 投稿日時 2008/11/20 20:08:10
こんにちは。

Public Class Form1

    Public Sub New()

        InitializeComponent()


        Me.KeyPreview = True
    End Sub
    Protected Overrides Sub OnKeyDown(ByVal e As System.Windows.Forms.KeyEventArgs)
        MyBase.OnKeyDown(e)
        MsgBox("反映しています、ココ")
    End Sub

End Class


こういうことじゃないんですかね?

茶さんの言ってる意味がわからないので、
できればコードを全部見せてください。
投稿者   (社会人) 投稿日時 2008/11/20 20:13:49
KeyEventArgs.KeyCode

KeyPressEventArgs.KeyCode
で判断。
投稿者 茶封筒  (小学生) 投稿日時 2008/11/20 22:34:31
再インストールしたら、復元しただけの処理になってた。
key取得できないのが、正常のような気もしてきたよ。
以前は同コードで処理できたんだしさ。
投稿者 (削除されました)  () 投稿日時 2008/11/20 23:24:21
(削除されました)
投稿者   (社会人) 投稿日時 2008/11/20 23:33:42
>以前は同コードで処理できたんだしさ。
じゃ、以前のコードと違うところを探すしかないね。

一応他の人のためにサンプル。
Public Class Form1
    Public Sub New()
        InitializeComponent()
    End Sub

    Public Sub Form1_Load(Byval sender As Object, Byval e As EventArgs) Handles Form1.Load
        Me.KeyPreview = True
    End Sub

    Private Sub TextBox1_KeyPress(Byval sender As Object, Byval e As KeyPressEventArgs) Handles TextBox1.KeyPress
        If e.KeyChar = Microsoft.VisualBasic.ChrW(Keys.Enter) Then
            MessageBox.Show("Enter is pressed.")
        End If
    End Sub
End Class

記憶だけで書いてるので、細かい間違いは勘弁。
投稿者 茶封筒  (小学生) 投稿日時 2008/11/21 00:15:35
enterKeyは反応します。
key指定しない場合も発生します(イベント)
英数文字の入力は反応がありません。
コードエディターではエラー表示もされてません。
VB以外のコードでは反応してるようです。
まぁ、別にいいですよ。
インターネットを解約しますから。
では。
投稿者 あにす  (社会人) 投稿日時 2008/11/21 01:32:09
一通り試したけど、ちゃんと反応するけどなー
VB.NET
    Private Sub Form1_KeyDown(ByVal sender As System.ObjectByVal e As System.Windows.Forms.KeyEventArgs) Handles MyBase.KeyDown
        Me.Text = e.KeyValue.ToString()
    End Sub

C#
        private void Form1_KeyDown(object sender, KeyEventArgs e) {
            this.Text = e.KeyValue.ToString();
        }

C++/CLI
		System::Void Form1_KeyDown(System::Object^  sender, System::Windows::Forms::KeyEventArgs^  e) {
this->Text = e->KeyValue.ToString();
}

IronPython
import clr
clr.AddReference("System.Windows.Forms")
from System.Windows.Forms import *

def form_KeyDown(sender,e):
form.Text = e.KeyValue.ToString()

form = Form()
form.KeyDown += form_KeyDown

Application.Run(form)
投稿者 茶封筒  (小学生) 投稿日時 2008/11/21 01:54:08
すいませn
イベントのeを渡してないだけでした(t_t)
入門者なんで。
 Private Sub Form1_KeyDown(ByVal sender As System.Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles MyBase.KeyDown
        ' If e.KeyValue = 37 Then
        'MsgBox("keyValue検証")__検証合格
        'End If
        If e.KeyCode = Keys.Left Then
            MsgBox("keyCode検証")
        End If
    End Sub
投稿者 茶封筒  (小学生) 投稿日時 2008/11/21 02:11:23
言い訳ですが、コードエディターで、波線がでなかったんで。
e.graphics
e.key
e.~~
投稿者 あにす  (社会人) 投稿日時 2008/11/21 02:30:56
>茶封筒さん
文法に間違いが無ければ波線は出ませんよね。
keys.keycode=keys.leftは常にFalseなのでMessegeBoxが出なかったのでしょう。
なにより上手く行ったようでよかったです。
投稿者 茶封筒  (小学生) 投稿日時 2008/11/21 04:54:49
Option Strict On
Public Class Form1
    Private leftFlag As Boolean = False
    Private rightFlag As Boolean = False
    Private left_ichi As Integer
    Private Sub Form1_KeyDown(ByVal sender As ObjectByVal e As System.Windows.Forms.KeyEventArgs) Handles Me.KeyDown
        If e.KeyCode = Keys.Left Then leftFlag = True
        If e.KeyCode = Keys.Right Then rightFlag = True
    End Sub

    Private Sub Form1_KeyUp(ByVal sender As ObjectByVal e As System.Windows.Forms.KeyEventArgs) Handles Me.KeyUp
        If e.KeyCode = Keys.Left Then leftFlag = False
        If e.KeyCode = Keys.Right Then rightFlag = False
    End Sub

    Private Sub Timer1_Tick(ByVal sender As System.ObjectByVal e As System.EventArgs) Handles Timer1.Tick
        If leftFlag = True Then
            left_ichi -= 3
        End If
        If rightFlag = True Then
            left_ichi += 3
        End If
        If left_ichi < 3 Then left_ichi = 3
        If left_ichi > 897 Then left_ichi = 897
        Me.mikataA.Left = left_ichi
    End Sub

    Private Sub Form1_Load(ByVal sender As ObjectByVal e As System.EventArgs) Handles Me.Load
        left_ichi = 450
    End Sub
End Class

処理速度が遅くて、キャラクターが、ぶれますが・・・
ここだけc++で作って、basicとマッチできますか?
無料版は、なかなか、きびすい感じです。
投稿者 あにす  (社会人) 投稿日時 2008/11/21 06:06:19
>茶封筒さん
Me.mikataA.Left = left_ichi
のmikataAとは何かのコントロールでしょうか?
コントロールを移動させている限りは言語を変えてもブレはなくならないでしょう。
投稿者   (社会人) 投稿日時 2008/11/21 06:31:02
コントロールを使うのではなく、描画してしまうほうがいいと思います。
数が増えるとコントロールだと重かったりするかもなので。
投稿者 茶封筒  (小学生) 投稿日時 2008/11/22 01:14:06
基礎構築
興味
基礎
興味
で遊んでましたが、また基礎をやることにしました。
WPF初心者入門をやります。
(^^p)
投稿者 茶封筒  (小学生) 投稿日時 2008/11/22 02:33:28
Option Strict On
'VisualBasic2008無料版 
Public Class Form1
    Private kyarakuter As Image
    Private leftFlag As Boolean = False
    Private rightFlag As Boolean = False
    Private ichi_X As Integer 'キャラ位置(横線上のみ) 

    Public Sub New()

        ' この呼び出しは、Windows フォーム デザイナで必要です。 
        InitializeComponent()

        ' InitializeComponent() 呼び出しの後で初期化を追加します。 
        kyarakuter = My.Resources.houdai_baria
    End Sub
    Private Sub kyarakuter_hyouji()
        Dim g As Graphics
        g = Me.CreateGraphics()
        g.DrawImage(kyarakuter, ichi_X, 100)
        g.Dispose()
    End Sub

    Private Sub Form1_KeyDown(ByVal sender As ObjectByVal e As System.Windows.Forms.KeyEventArgs) Handles Me.KeyDown
        If e.KeyCode = Keys.Left Then leftFlag = True
        If e.KeyCode = Keys.Right Then rightFlag = True
    End Sub

    Private Sub Form1_KeyUp(ByVal sender As ObjectByVal e As System.Windows.Forms.KeyEventArgs) Handles Me.KeyUp
        If e.KeyCode = Keys.Left Then leftFlag = False
        If e.KeyCode = Keys.Right Then rightFlag = False
    End Sub

    Private Sub Timer1_Tick(ByVal sender As System.ObjectByVal e As System.EventArgs) Handles Timer1.Tick
        Refresh()
        If leftFlag = True Then
            ichi_X -= 2
            If ichi_X < 2 Then ichi_X = 2
        End If
        If rightFlag = True Then
            ichi_X += 2
            If ichi_X > 298 Then ichi_X = 298
        End If
        kyarakuter_hyouji()
    End Sub
End Class

Disposeの使い方は、これで、いいですか?
一応、このコーナーは解決ですかねぇ(^^)
では。
投稿者 茶封筒  (小学生) 投稿日時 2008/11/22 07:51:50
WPF!!!
なんじゃい!このスゴイやつ!
すごすぎる。
Inkcanvasを使うだけで、フリーソフトに匹敵する!!!wwww
こんなに、すごいのか・・・・