tagCANDY CGI VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板) [ツリー表示へ]   [Home]
一括表示(VB.NET VB2005)
タイトルリストボックスの項目選択
記事No9777
投稿日: 2010/01/09(Sat) 15:32
投稿者があ
お世話になっています。当方VB2005を使用している者です。
宜しくお願い致します。

リストボックスに表示された項目を、ボタンを押す事で
タイマーの速さに合わせて上から下へ順番に選択状態にしたいと考えています。

リストボックスの項目数を取得し、仮想キーコードを使用して
項目数分の↓キーをfor文で送ることで解決できるかと思ったのですが、
↓キーが項目数分送られた後も止まらず、送られ続けてしまいます。

   Private Sub Button1_Click(ByVal sender As System.Object,_
    ByVal e As System.EventArgs) Handles Button1.Click

    ListBox1.SetSelected(0, True)
    Timer1.Enabled = True
   End Sub

   Private Sub Timer1_Tick(ByVal sender As System.Object,_
   ByVal e As System.EventArgs) Handles Timer1.Tick

     Dim n As Integer = ListBox1.Items.Count
      Dim e As Integer
        For i As Integer = 0 To n
     If e = i Then
            SendKeys.SendInput(wVk.VK_DOWN)
          End if

     If e = n Then
      Timer1.Enabled = False
     End If
        Next
   End Sub

一番下の項目が選択されたらタイマーを停止したいのですが、うまくいきません。
何か他に方法がありましたら、申し訳ありませんがご教授宜しくお願い致します。

[ツリー表示へ]
タイトルRe: リストボックスの項目選択
記事No9778
投稿日: 2010/01/09(Sat) 18:44
投稿者花ちゃん
> リストボックスに表示された項目を、ボタンを押す事で
> タイマーの速さに合わせて上から下へ順番に選択状態にしたいと考えています。
何の為に最終的に何がしたいのでしょうか?
(方法ではなく目的を教えて下さい)
全て選択状態にしたいなら、ここのサンプルをご覧ください。


>    Private Sub Button1_Click(ByVal sender As System.Object,_
>     ByVal e As System.EventArgs) Handles Button1.Click
>
>     ListBox1.SetSelected(0, True)
>     Timer1.Enabled = True
Timer1 のインターバルはどのようになっていますか?

>    End Sub
>
>    Private Sub Timer1_Tick(ByVal sender As System.Object,_
>    ByVal e As System.EventArgs) Handles Timer1.Tick

Timer1_Tick イベントに書いている事は、インターバルで設定した時間事に処理が
行われるという事はごぞんじですよね。

>
>      Dim n As Integer = ListBox1.Items.Count

Items.Count はどういう値を返すか、今一度確認しておいて下さい。
(本来ならエラーがでているはずですが。)


>       Dim e As Integer
>         For i As Integer = 0 To n
この処理は、インターバル毎に、初めから処理が繰返し行われますが、それが仕様ですか?


>      If e = i Then
>             SendKeys.SendInput(wVk.VK_DOWN)
>           End if
>
>      If e = n Then
>       Timer1.Enabled = False
>      End If
>         Next
>    End Sub
>
> 一番下の項目が選択されたらタイマーを停止したいのですが、うまくいきません。
> 何か他に方法がありましたら、申し訳ありませんがご教授宜しくお願い致します。

いずれにしろ目的にあった適切な処理をするようなコードに変更しないと...。

[ツリー表示へ]
タイトルRe^2: リストボックスの項目選択
記事No9779
投稿日: 2010/01/09(Sat) 19:58
投稿者があ
花ちゃんさん、ご回答ありがとうございます。

私は現在、スイッチ1つで操作を行うオンスクリーンキーボードを作成しています。
そこに予測変換機能を追加したいと考えていて、オンスクリーンキーボードを使って
テキストボックスに文字を入力すると、入力した文字から始まる語句を
語句が保存されているテキストファイルから検索して呼び出し、
リストボックスに表示させています。

それからリストボックスに表示させた語句を上から1行ずつ順番にオートスキャンして、
スイッチを押した時に選択状態であるリストボックスの内容をテキストボックスに
表示させたいと考えています。
説明が不足していて申し訳ございません。

>Timer1 のインターバルはどのようになっていますか?
インターバルは500に設定しています。
ご指摘をいただいて、今の状態では目的に合った処理を実行することが
難しいことが分かりました。
ご教授宜しくお願い致します。申し訳ございません。

[ツリー表示へ]
タイトルRe^3: リストボックスの項目選択
記事No9780
投稿日: 2010/01/09(Sat) 21:17
投稿者花ちゃん
> 私は現在、スイッチ1つで操作を行うオンスクリーンキーボードを作成しています。

そのような事がしたいなら今回のような事は、基本中の基本ですから自分で考えて
できないようでは、この先も他人に頼る事になるかと

> そこに予測変換機能を追加したいと考えていて、オンスクリーンキーボードを使って
> テキストボックスに文字を入力すると、入力した文字から始まる語句を
> 語句が保存されているテキストファイルから検索して呼び出し、
> リストボックスに表示させています。
>
> それからリストボックスに表示させた語句を上から1行ずつ順番にオートスキャンして、
> スイッチを押した時に選択状態であるリストボックスの内容をテキストボックスに
> 表示させたいと考えています。
> 説明が不足していて申し訳ございません。

説明を聞いても良く解りませんが。

> ご教授宜しくお願い致します。申し訳ございません。

貴方のコードを活かすなら...。

Private Sub Button1_Click(ByVal sender As System.Object, _
                          ByVal e As System.EventArgs) Handles Button1.Click
   ListBox1.SetSelected(0, True)
   itemCount = 0
   Timer1.Enabled = True
End Sub

Private itemCount As Integer

Private Sub Timer1_Tick(ByVal sender As Object, _
                        ByVal e As System.EventArgs) Handles Timer1.Tick
   SendKeys.SendInput(wVk.VK_DOWN) 'この関数が正しく動くものとして。
   itemCount += 1
   If itemCount = ListBox1.Items.Count Then
      Timer1.Enabled = False
   End If
End Sub

※ 酒井先生のコードを流用されているようですが、あそこのSendInput 関数は、
   割り込みが入るので、ここの掲載のものを使用された方がいいかも。
  (他人のコードをお使いになるのならある程度理解した上で使用するようにして下さい)

[ツリー表示へ]
タイトルRe^4: リストボックスの項目選択
記事No9781
投稿日: 2010/01/11(Mon) 00:30
投稿者があ
花チャンさん、ご回答ありがとうございます。

ご指導いただいた通りに実行したところ、うまくいきました。
今後は出来るだけ人に頼らず自分で解決できるようにしたいと思います。
ありがとうございました。

[ツリー表示へ]
タイトルRe^5: リストボックスの項目選択
記事No9783
投稿日: 2010/01/11(Mon) 13:56
投稿者花ちゃん
> 今後は出来るだけ人に頼らず自分で解決できるようにしたいと思います。
> ありがとうございました。

誤解無きように申し添えますが、質問するなと言っているのではありません。
自分で調べて、試して見て解らない部分だけを質問するようにして下さいと
言う意味です。(丸投げの質問やコードを書いて下さい的な質問は駄目と言う事です。)

[ツリー表示へ]