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;
よろしくお願いいたします。
前回位置から、TABでフォーカス移動してカーソルキーを押すまでに、ListViewに対して何かしていませんか?
こちらでは再現しませんでした。
# Delphi7
もしかしたらDelphi6固有の問題かもしれませんが、ちょっとわかりません。
言いたいことがわかりました。
前回の位置でなく、ItemIndexで指定したのに、ってことですね。
ItemIndexは、Selectedを変更するだけです。
フォーカス位置を変更したいのであれば、
ListView1.ItemFocused := ListView1.Items[20];
ですね。
にしのさん、ありがとうございました。
おかげさまでうまく動作するようになりました。
ただ、ItemIndexの設定と ItemFocusedとの違いがよく分かりません。
(実際、MakeVisibleで表示移動もしますし・・・)
もしよろしければ、ご教授願えませんでしょうか。
ItemIndexは、TListItemのSelectedプロパティを変更します。
ItemFocusedは、TListItemのFocusedプロパティを変更します。
Selectedは1つのViewのうち、複数がtrueの場合があります。
Focusedは、1つのViewのうち、1つがtrueか、すべてfalseの場合があります。
MakeVisibleは、そのItemを表示するだけなので、選択されている、フォーカスがあるなどの条件はありません。
ちょっと訂正。
> Selectedは1つのViewのうち、複数がtrueの場合があります。
Selectedは1つのViewのうち、1つ以上がtrueか、すべてfalseの場合があります。
Focusedが複数trueであることはありません。
にしのさん、ありがとうございます。
複数行選択を考慮すると、Selectedと Focusedが
必要になるんですね。よく分かりました。
本当にありがとうございました。
ツイート | ![]() |