1

Delphiでコーディングし、OnKeyPressイベントハンドラーをTStringGridにアタッチします。

OnKeyPressイベントは、ユーザーが入力しているグリッドセルが、押されたキーで実際にその値を更新する前に発生します。これは明らかに問題です。ユーザーが変更したときのように、現時点でそのセルの内容が何であるかを知りたい場合です。

「ハッキングされた」ソリューションは、すべての詳細を考慮していない場合は単純です。セルから値を取得し、OnKeyPressイベントにKeyパラメーターが付属しているため、その値を最後に追加します。これで、現在の値が得られます。セルの!

誤り。ユーザーがセル内のすべてのテキスト(つまり、「foo」)を選択し、「b」と入力している場合はどうなりますか。彼らがテキストを選択したので、それは消去され、文字「b」に置き換えられます。ただし、セルの値はOnKeyPressでは「foo」として表示され、Keyの値は「b」になるため、上記のロジックにより、アプリケーションはセルに「foob」が含まれていると結論付けることができます。真実ではない。

それで。 誰かがこの問題を回避する方法を知っていますか?グリッドのコンテンツが更新された後にOnKeyPressを反応させる方法はありますか、それともハンドラーの開始時に強制的に更新する方法はありますか?ここではOnKeyUpイベントの使用を必死に避けているので、それ以外の提案をいただければ幸いです。

4

1 に答える 1

5

セル値の変更に応答したい場合、 OnSetEditTextイベントを使用しないのはなぜですか?

キーボード イベントは、キーボード入力に応答するためのものであり、その入力に対するコントロールの応答ではありません。通常、コントロールは 1 つ以上の追加イベントを提供して、アプリケーションが何らかの入力に対するコントロールの応答に応答できるようにします。この場合、キーボード入力によってセル選択の変更ではなく、セル値が変更されます。たとえば、 .

余談ですが、これらのイベントは、グリッド コントロールがそれらのイベントに応答するに発生する必要があるのはごく自然なことです。そのため、そのようなイベントがコントロールに到達するに効果的に「フィルタリング」することができます。セルの値。

于 2010-04-07T04:24:10.477 に答える