2017-06-30 7 views
2

現在、数千ものアイテムが潜在的に存在する可能性があるオブジェクトを使用して、Embarcadero C++でTListViewを使用しています。 CTRL + A機能を設定して、すべての項目を一度に選択できるようにします。しかし、myListView-> SelectAll();を使用すると、各項目(!!!)のOnSelectItemイベントが発生し、膨大な時間がかかります。 私はBeginUpdate/EndUpdate、Enabled = falseを試しました。結果はまったくありません。つまり、各項目に対してOnSelectItemがトリガーされました。 OnSelectItemイベントからすぐに戻るように変数を設定しても、時間がかかりすぎます。 SelectAll()が呼び出されたときTListViewがOnSelectItemイベントを発生させないようにする方法(C++ Embarcadero)

イベントの何千ものを避けるために簡単な解決策はありますがトリガー?ヘルプのあらゆる種類の

感謝。

+0

あなたのOnSelectItem()本体をコメントアウトし、依然として容認できない時間がかかるかどうかチェックしてください。 – Roberto

+0

だから何ですか?私はいくつかの他の機能のためにOnSelectItemをもう一度必要とします... Ok、私は試してみます... –

+1

Ok、私は試しました。 38K個のアイテム数に対して、18秒(OnSelectItemが処理され、1つのブール値がテストされてから返されます)から6秒(OnSelectItemは処理されません)になります。 –

答えて

0

これは不可能だと私は驚くことはありませんが、OnSelectItemへの呼び出しに100,000未満のアイテムが必要なのはなぜかと思います。おそらくOnSelectItemの管理パフォーマンスを向上させるだけです。ええ、TListViewのは、非常に多くの項目で動作するように意図されていない

、私はすべてのユーザーがスクロール表示されていない:あなたはのSelectAll

の途中にある場合だけでいくつかのコメントの後に追加されたそれらから復帰あなたが別のスレッドでそれを行うならば、それほど速いでしょう。like they recommend in this Embarcadero article

+0

既にそれを行いました:OnSelectItemプロシージャはbooleanをテストしてから戻ります。 –

+0

さて、ありがとう...それは私が恐れていたものです。 –

+0

私は最初の項目を選択した後、キーボードでCTRL + MAJ + ENDを押すと、すべての項目がウインクで選択されるようになりました。さて、私はコントロールにキーストロークを送る方法を見つけなければなりません。それは私が尋ねる次の質問であるようです。貴重な答えが見つからないようです。乞うご期待! –

関連する問題