人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

VB.NET(Visual Basic 2010)で質問です。ListViewで選択されている項目について、「フォームをアクティブにせず」選択を解除する方法について教えてください。
自フォームがアクティブでない状態でもそのまま自動で選択項目を変えられるようにしたいのですが、(ListViewの何か).SelectedIndices.Clear() とか (ListViewの何か).Items(i).Selected = False の場合、勝手に自フォームがアクティブになってしまうので困っています。
OSはWindows8.1です。よろしくお願い致します。


●質問者: くじぇ
●カテゴリ:コンピュータ
○ 状態 :終了
└ 回答数 : 1/1件

▽最新の回答へ

1 ● mattn
●300ポイント
Public Class Form1
 Private selectedIndex As Integer = 0
 Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick
 ListView1.SelectedItems.Clear()
 Me.selectedIndex += 1
 If Me.selectedIndex >= ListView1.Items.Count Then
 Me.selectedIndex = 0
 End If
 ListView1.Items(Me.selectedIndex).Selected = True
 ListView1.Items(Me.selectedIndex).Focused = False
 End Sub

 Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
 ListView1.HideSelection = False
 ListView1.Items.Clear()
 ListView1.Items.Add("foo1")
 ListView1.Items.Add("foo2")
 ListView1.Items.Add("foo3")

 Timer1.Interval = 1000
 Timer1.Start()
 End Sub
End Class

上記のコードで試しましたが、フォーム自身にフォーカスがあたる事はありませんでした。


くじぇさんのコメント
mattnさんご返答有難うございます。 わざわざ調べていただいたのに申し訳ございません、条件が抜けていました。 listview.Items.Add() は手軽ですが遅すぎるので、今回の案件には使っていません。 VirtualModeを有効にしてコーディングしています。 その上でshell関数で外部プログラムを起動させてそのウインドウを全面に出しつつ、バックグラウンドでlistviewの内容を更新したいと考えています。 しかしその過程でステップ実行で試してみたところ、(ListViewの何か).SelectedIndices.Clear()を実行するとフォーム自身にフォーカスがあたって、外部プログラムのウインドウが後ろにいくようなので困っています。 よろしくお願い致します。

mattnさんのコメント
上記のプログラムを実行して他のウィンドウにフォーカスを当てたままにしていても、アプリケーションにフォーカスが戻ってくる事はありませんでした。 ですのでフォーカスを当ててしまう原因はプロセスを起動している部分(shell関数)だと思います。

くじぇさんのコメント
mattnさんご返答ありがとうございます。 私の場合、Shell関数そのままで、(ListViewの何か).SelectedIndices.Clear() とか (ListViewの何か).Items(i).Selected = Falseの部分を除去すると、私の意図通りShell関数にフォーカスが残ったまま戻らない動作をしてくれました。 ですので、ShellからForm1へ勝手にフォーカスを戻す問題の原因はListView関連だと考えています。
関連質問

●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ