Delphi 7 でMultiSelectStyle
プロパティがどのようSelected
に機能するかを説明してもらえますか? 私は何年もの間、Delphi コーディングから離れていましたが、誰かが私に何を見逃しているのか指摘しない限り、その背後にある論理はまったくわかりません。Selected.Count
TTreeView
ポイントへ。TTreeView
選択したフォルダーの内容を入力するルーチンがあります。再帰を使用するため、各フォルダーは子を持つノードとして表されます-サブフォルダーとファイルです。MultiSelect
が に設定されているため、ユーザーはツリー上の複数のアイテムを選択できますTrue
。グループではMultiSelectStyle
、4 つの子プロパティすべてTrue
を同様に設定しました (おそらくそれは間違いでした)。
私のプログラムのデバッグとして(これは正反対に動作すると思います)、次のコードがあります:
ShowMessage(IntToStr(tvShell.Selected.Count) + ' selected');
for i := 0 to (tvShell.Selected.Count - 1) do
begin
ShowMessage(tvShell.Selected.Item[i].Text);
end;
そこで、プログラムを実行して、任意のフォルダーを選択します。ツリーがレンダリングされ、次のように表示されます。
- 選択したフォルダーのフル パス
Text
と 6 つの子を持つルート ノード。選択したフォルダーには 6 つのサブフォルダーが含まれ、ファイルは含まれていません。 - これらの 6 つのサブフォルダーにはファイルのみが含まれるため、ルート ノードの 6 つの子には適切な数の子が含まれます。たとえば、最初に 44 (ファイルまたはアイテム) が含まれ、最後に 9 (アイテムまたはファイル) が含まれます。
とマウスを使用しCtrl
て、最初 (44 ファイル) と最後 (9 ファイル) のツリー ノード (ルート ノードの子) を選択し、上記のデバッグ コードを実行するボタンを押します。
私は何を期待していますか?2 つのアイテムが選択されています。msVisibleOnly
は between に設定されてTrue
いるので、 に設定して 3 つのメッセージが表示されるMultiSelectStyle
ことを期待しています。tvShell.Selected.Count
2
何を得るか?最初のメッセージは、9 つのアイテムが選択されていることを示しています。続行すると、最後のフォルダー(ツリーの子) の内容を示す追加の 9 つのメッセージが表示されます。一番面白いのは、実際に私tvShell.Selected
が選んだ 2 つの兆候がないことです。なんてこと?
理不尽が続く…
これらすべての手順を繰り返しますが、今回は最後のフォルダー (子) を選択 (クリック) し、Ctrl
ボタンを押したまま最初のフォルダー (ルートの子) をクリックしています。人間として、 2 つのアイテムが選択されていることがわかります。この木を見ると、視覚的に選択に違いは見られません。しかし、Delphi はそうします。
デバッグ コードを実行すると、今回は44個の項目が選択されているという情報が表示され、最初のフォルダーの内容を示す 44 個の追加メッセージ ボックスが表示されます。+
完全に混乱して、最初と最後のフォルダーの横をクリックして、内部で選択されたアイテムがあるかどうかを確認していますが、ありません (msVisibleOnly
に設定されているためTrue
)。
なるほど、それはどのように機能するのですか (最後にクリックしたアイテムの子はすべて選択されたアイテムの中にあると常に主張しています)、私はそれを理解していません。この背後にあるロジックはどこにありますか? コードからの結果が現実を反映していない場合、これはどのように役立つのでしょうか?
難しい言葉で申し訳ありませんが、これは私にとって完全な愚かさです。私は Delphi でコードを書いていないので (私は実際にそのような言語が嫌いです)、啓蒙や説明を求めません。喜んで読んでください)。
TTreeView
しかし、Delphi の誤った現実の解釈ではなく、真に選択されたものをコードから取得するために、コード内およびプロパティ間でどのような魔法を行う必要があるかを誰かが説明してくれれば、私は本当に幸せです。2 つの項目が選択されている場合は、tvShell.Selected.Count
2 に設定し、選択したtvShell.Selected
2 つの項目 (両方) を含める必要があります。それ以上でもそれ以下でもありません。
申し訳ありませんが、この質問は非常に長いですが、Delphi が本当に奇妙な言語であることを発見したとき (何年も経ってから)、私はフラストレーションの後に反応しなければなりませんでした。