- - PR -
ListViewの選択行が移動しない
1
投稿者 | 投稿内容 | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2007-06-01 19:48
こんにちは。
キーボードからの入力でリストビューの選択行の移動をさせたいのですが、 スペースキーでのイベント時のみ移動しません。 「 A 」や「 Enter 」の入力では次の行に移動します。 どうすれば、スペースキーで次行に移動させることが出来るでしょうか。 よろしくお願いします。 環境:VisualStadio2005 SP1 public Form1() { InitializeComponent(); listView1.View = View.Details; listView1.HideSelection = false; listView1.MultiSelect = false; listView1.Columns.Add( "見出し" ); listView1.Items.Add( "Test1" ); listView1.Items.Add( "Test2" ); listView1.Items.Add( "Test3" ); } private void listView1_KeyDown( object sender, KeyEventArgs e ) { int nextIndex = listView1.SelectedItems[ 0 ].Index + 1; switch( e.KeyCode ) { // 移動しない case Keys.Space: listView1.Items[ nextIndex ].Selected = true; break; // 移動する case Keys.A: listView1.Items[ nextIndex ].Selected = true; break; // 移動する case Keys.Enter: listView1.Items[ nextIndex ].Selected = true; break; } } } | ||||||||||||
|
投稿日時: 2007-06-01 19:58
スペース キーの場合は、Node を展開する役割があるからではないでしょうか。 KeyDown イベントよりもっと上のメソッドで横取りしないと意図したとおりに動かないかもしれません。 _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||||||||||
|
投稿日時: 2007-06-02 02:27
SelectedとFocus、ほかにいくつかの内部状態によって振る舞いが変わります。 ViewやMultiselect、HideSelectionなどによっていろいろ変わるので、 全ての場合については把握しきれていませんが、 MultiSelect=FalseのListViewの場合、 Focusも設定すれば大体うまくうごきます。
他のキー(AやEnter)についてもFocusedをセットしておいたほうが 問題なく動作すると思います。 | ||||||||||||
|
投稿日時: 2007-06-02 23:40
じゃんぬねっとさん、れいさん返答ありがとうございます。
れいさんのアドバイスどおり、移動後の行に「 .Focused = true 」することで、 スペースキーでも移動が確定すようようになりました。 ヘルプやサンプルなどでも「 ListView1.Focus(); 」となっていたので、 リストビュー自体にはフォーカスを移動させていたのですが、 まさか、行にフォーカスさせないといけないとは思いませんでした。 大変勉強になりました。 ありがとうございました。 |
1