2

1 日、1 週間、1 か月などを選択できる単純なカレンダー コントロールを作成しました。この単純さは、私が自分で絵を描くのではなく、代わりにたくさんのボックスとラベルを作成してカレンダーの日付セルとして機能させることを選んだという事実から来ています。

日付または日付範囲が選択されたら、その範囲を強調表示する必要があります。セルを反復処理してスタイルを切り替えることで、簡単に実行できます。[編集:]ただし、スタイルを明示的にnullに設定したことがないにもかかわらず、セルが最初にスタイル名が空白であるかのように描画され、次に正しいスタイルで再描画されるまでに遅延が発生するようです- - 「CalendarCell」と「CalendarCellSelected」を交互に使用します。

これが Windows フォームの場合は、親コンテナーで SuspendLayout を呼び出して、更新が完了した後にのみコントロールが再描画されるようにします。私が知りたいのは、Flex に同様のソリューションが存在するかどうかです。いわば、カレンダー全体を「手動で」描画することはできるだけ避けたいと思います。

編集:私が見ているものをより正確に反映するように問題の説明を変更しました。

4

3 に答える 3

1

callLater() をまったく使用していますか?

callLater() を使用すると、フレームを描画する必要があるか、validateNow() などでフレーム描画を強制するまで、変更がバッチ処理されるため、ビジュアルが向上する可能性があります。あなたの場合はそれで十分かもしれません。

于 2008-11-03T13:50:39.720 に答える
0

これはまさにあなたが探しているものではないかもしれませんが、Adobe の David Coletta は、ユーザーが挿入ポイントの移動を停止するまでアプリ UI の特定の領域を更新するイベントを延期するために Buzzword で使用する EventCoalescer を説明するビデオを投稿しました。たとえば、テキスト。

Hans Van de Velde によるこのブログ投稿に も、同様のソリューションと実際のコードがあります。

于 2008-11-03T11:39:20.327 に答える
0

カレンダー コントロールは UIComponent ですか? commitProperties()、updateDisplayList() などの標準の無効化メソッドを使用していますか?

あなたがしたいことは、スタイルが変更されるセルのプライベート配列を保持することですが、 commitProperties() オーバーライドで実際のスタイルの切り替えを行います。ちらつきが少し驚くため、 setStyle() が validateNow() を起動するかどうかはわかりません。

于 2008-11-05T01:43:27.067 に答える