ListViewでのカーソル制御

解決


だい  2003-09-10 20:28:03  No: 4725

Delphi6 Pro SP2 (Win98)を使用しています。
ListViewを使用し、Tabキーでリストビューにフォーカスをあてて
カーソルキーを押すと、カーソルが先頭に移動してしまいます。
以前のフォーカス位置からカーソル移動するにはどのようにすれば
よろしいのでしょうか。主なコードは以下の通りです。

(FormCreate()にて)
with ListView1 do begin
  ViewStyle := vsReport;
  GridLines := True;
  ReadOnly := True;
  RowSelect := True;
  HideSelection := False;
    
  // 20行以上のリストを追加 (省略)

  ItemIndex := 20;
  Items[ItemIndex].MakeVisible(True);  // 表示を選択行に移動
// Items[ItemIndex].Selected := True;  // 使用しても効果なし
end;

よろしくお願いいたします。


にしの  2003-09-10 20:48:27  No: 4726

前回位置から、TABでフォーカス移動してカーソルキーを押すまでに、ListViewに対して何かしていませんか?
こちらでは再現しませんでした。
# Delphi7
もしかしたらDelphi6固有の問題かもしれませんが、ちょっとわかりません。


にしの  2003-09-10 20:54:34  No: 4727

言いたいことがわかりました。
前回の位置でなく、ItemIndexで指定したのに、ってことですね。
ItemIndexは、Selectedを変更するだけです。

フォーカス位置を変更したいのであれば、
ListView1.ItemFocused := ListView1.Items[20];
ですね。


だい  2003-09-10 21:15:46  No: 4728

にしのさん、ありがとうございました。
おかげさまでうまく動作するようになりました。

ただ、ItemIndexの設定と ItemFocusedとの違いがよく分かりません。
(実際、MakeVisibleで表示移動もしますし・・・)
もしよろしければ、ご教授願えませんでしょうか。


にしの  2003-09-10 22:07:30  No: 4729

ItemIndexは、TListItemのSelectedプロパティを変更します。
ItemFocusedは、TListItemのFocusedプロパティを変更します。
Selectedは1つのViewのうち、複数がtrueの場合があります。
Focusedは、1つのViewのうち、1つがtrueか、すべてfalseの場合があります。

MakeVisibleは、そのItemを表示するだけなので、選択されている、フォーカスがあるなどの条件はありません。


にしの  2003-09-10 22:09:43  No: 4730

ちょっと訂正。
> Selectedは1つのViewのうち、複数がtrueの場合があります。
Selectedは1つのViewのうち、1つ以上がtrueか、すべてfalseの場合があります。

Focusedが複数trueであることはありません。


だい  2003-09-10 22:21:55  No: 4731

にしのさん、ありがとうございます。

複数行選択を考慮すると、Selectedと Focusedが
必要になるんですね。よく分かりました。
本当にありがとうございました。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加