tagCANDY CGI VBレスキュー(花ちゃん)の Visual Basic 6.0用 掲示板 [ツリー表示へ]   [Home]
一括表示(VB6.0)
タイトルlistboxクラス内でupキー入力判定の仕方(VB6)
記事No16256
投稿日: 2016/10/02(Sun) 16:53
投稿者はさみ
listboxクラス内でupキーが押されたかどうかを判定するプログラムがわかりません。
言語はVB6です。
下記のやり方ではだめでしょうか?


Private sub List1()
if  System.Windows.Forms.KeyPressEventArgs.KeyUp = True Then
   MsgBox "リスト内で↑キーが押されたよ!"
end if

End sub

[ツリー表示へ]
タイトルRe: listboxクラス内でupキー入力判定の仕方(VB6)
記事No16257
投稿日: 2016/10/02(Sun) 17:26
投稿者魔界の仮面弁士
>  if  System.Windows.Forms.KeyPressEventArgs.KeyUp = True Then
System.Windows.Forms 何某は、VB.NET で使われる記述です。
まぁ、上記は VB6 でも VB.NET でも VBA でも NG ですが。


VB6 で判定するとなれば、こんな感じですね。

Private Sub List1_KeyDown(KeyCode As Integer, Shift As Integer)
    If KeyCode = vbKeyUp Then
        Debug.Print "↑キーが押された", List1.ListIndex
    End If
End Sub

Private Sub List1_KeyUp(KeyCode As Integer, Shift As Integer)
    If KeyCode = vbKeyUp Then
        Debug.Print "↑キーが離された", List1.ListIndex
    End If
End Sub


>    MsgBox "リスト内で↑キーが押されたよ!"
こういう場合には MsgBox ではなく、上記のように Debug.Print を使うことをお奨めします。


「キー入力」や「マウス移動」、あるいは「フォーカス制御」のテストを行う場合、
メッセージボックスを表示してしまうと、そこで処理が一時中断されるため、
本来の処理の流れが阻害されることになります。
(たとえば、List1_KeyDown で MsgBox を出すと、List1_KeyUp が処理されないなど)

[ツリー表示へ]
タイトルRe^2: listboxクラス内でupキー入力判定の仕方(VB6)
記事No16258
投稿日: 2016/10/03(Mon) 22:48
投稿者はさみ
> >  if  System.Windows.Forms.KeyPressEventArgs.KeyUp = True Then
> System.Windows.Forms 何某は、VB.NET で使われる記述です。
> まぁ、上記は VB6 でも VB.NET でも VBA でも NG ですが。
>
>
> VB6 で判定するとなれば、こんな感じですね。
>
> Private Sub List1_KeyDown(KeyCode As Integer, Shift As Integer)
>     If KeyCode = vbKeyUp Then
>         Debug.Print "↑キーが押された", List1.ListIndex
>     End If
> End Sub
>
> Private Sub List1_KeyUp(KeyCode As Integer, Shift As Integer)
>     If KeyCode = vbKeyUp Then
>         Debug.Print "↑キーが離された", List1.ListIndex
>     End If
> End Sub
>
>
> >    MsgBox "リスト内で↑キーが押されたよ!"
> こういう場合には MsgBox ではなく、上記のように Debug.Print を使うことをお奨めします。
>
>
> 「キー入力」や「マウス移動」、あるいは「フォーカス制御」のテストを行う場合、
> メッセージボックスを表示してしまうと、そこで処理が一時中断されるため、
> 本来の処理の流れが阻害されることになります。
> (たとえば、List1_KeyDown で MsgBox を出すと、List1_KeyUp が処理されないなど)

御回答有難うございます。
Debug.Print を使ってみましたが、凄く便利です。
これから使っていきます。

UPキーdownキーの入力処理についてですが、
もう一点質問させてください。

現在、下記をどのように修正すればいいか悩んでいます。
リストボックスclass内で、UPまたdownキー入力がされたかどうの判定値が取得できれば問題は解決できると思うのですが、可能でしょうか?

(問題)
リストボックスを作成し、リストボックス内に表示した項目を選択。
項目選択後は、リストボックスclassで設定したプログラム処理A,処理Bが実行される。
その後、UPキー又はdownキーを押すと、リストボックス内の項目を選択したと判定され、処理A,処理Bが同じように実行される。
これを処理Aは実行せず、処理Bだけ実行されるプログラムに直したい。

[ツリー表示へ]
タイトルRe^3: listboxクラス内でupキー入力判定の仕方(VB6)
記事No16260
投稿日: 2016/10/04(Tue) 09:07
投稿者魔界の仮面弁士
> UPまたdownキー入力がされたかどうの
先の Debug.Print なサンプルで示したように、
押された時に KeyDown、離されると KeyUp イベントが呼ばれるので、
入力されたことを任意の変数で保持しておけば解決できるかと。

なお、押し続けた場合に KeyDown をどの程度発生させるかは、
コントロールパネルのキーボードのプロパティで変更できます。


ただ、ListBox はキー操作だけではなく、マウス等でも
操作されるものですから、普通は Up/Down キーに限定した
動作仕様にはせず、選択されている項目位置で判断するのが
一般的かと思います。

Private Sub List1_Click()
    Debug.Print List1.ListIndex, "[";
    Debug.Print List1.List(List1.ListIndex);
    Debug.Print "]"
End Sub

Private Sub List1_DblClick()
    If List1.ListIndex >= 0 Then
        MsgBox List1.List(List1.ListIndex)
    End If
End Sub




> (問題)
問題点…というか課題?
質問ではなく、やろうとしている事の説明のようですね。

[ツリー表示へ]