1

誰かがそこにある例、またはVBoxのように機能するが、2つ以上の列を持つアプリに追加できるクラスを知っているかどうか疑問に思っていますか?

ループからVBoxにアイテムを追加していますが、これは正常に機能しますが、2つの列に分割する必要があります。

 _________________
|        |        |
| Item 1 | Item 2 |
| Item 3 | Item 4 |
| Item 5 |        |
|________|________|

今のところ、2つのVBoxを並べて設定し、一方に奇数のアイテムを割り当て、もう一方に偶数のアイテムを割り当てますが、コントロールにこれを自動的に行わせると便利です。

編集
私に回避策を与えるのをやめてください。私はすでに機能的な回避策を持っています。しかし、これを行うクラスをすでに作成している場合、またはオンラインでどこで見つけることができるかを知っている場合は、本当に感謝しています。ありがとう

4

7 に答える 7

1

flexlib(http://code.google.com/p/flexlib/)には、必要なことを正確に実行する素敵なFlowContainerコンテナコントロールがあります。

于 2010-02-16T04:07:43.030 に答える
0

各行にHBoxを含むVBoxを使用して、次のように各HBoxに2つのアイテムを入力するだけで済みます。

var vb:VBox;
var array_of_items:Array;

for(var i:int = 0; i <array_of_items.length; i + = 2)
{
var hb:Hbox = new HBox();
hb.addChild(array_of_items [i]);
hb.addChild(array_of_items [i + 1]);
vb.addChild(hb);
}

于 2010-02-01T17:02:29.193 に答える
0

私自身も同様の問題を抱えていました。これは私が使用することになったものです:

package {
    import mx.containers.HBox;
    import mx.containers.VBox;
    import mx.events.FlexEvent;

    public class MultiColumnVBox extends HBox {
        // public properties
        public var columnWidth:int;
        public var verticalGap:int;
        public var adjustForScrollbar:Boolean;

        public function MultiColumnVBox() {
            super();
            this.addEventListener(FlexEvent.CREATION_COMPLETE, rearrangeChildren);
        }

        private function rearrangeChildren(evtObj:FlexEvent):void {
            // height will change whilst rearranging children, as will the Children Array
            // we store them once at the start
            var myHeight:int = this.height;
            var children:Array = this.getChildren();

            var lastIndex:int = 0;
            var vBoxIndex:int = 0;
            var vBox:VBox;
            var totalHeight:int = -this.verticalGap + (this.adjustForScrollbar ? 16 : 0);

            for(var i:int=0; i<children.length; i++) {
                // resize each child and measure the height
                // if you don't want it resized to the columnWidth, set the maxWidth property
                children[i].width = this.columnWidth;
                children[i].validateSize();
                totalHeight += children[i].measuredHeight + this.verticalGap;
                // if we're too tall, or we've reached the last element, move them into a VBox
                if(totalHeight > myHeight || i == children.length-1) {
                    vBox = new VBox();
                    vBox.setStyle("verticalGap", this.verticalGap);
                    vBox.width = this.columnWidth;
                    // include last child if there is room
                    for(var j:int=lastIndex; j<(totalHeight > myHeight ? i : i+1); j++) {
                        vBox.addChild(children[j]);
                    }
                    this.addChildAt(vBox, vBoxIndex);
                    vBoxIndex += 1;
                    lastIndex = i;
                    totalHeight = -this.verticalGap + (this.adjustForScrollbar ? 16 : 0);
                }
            }
        }
    }
}

ただし、最終的な結果は少し異なります。子を交互の列に移動する代わりに、最初の列、次に2番目、次に3番目などの高さを無期限に埋めます。

あなたが言ったように、私たちのクラスを作ることを計画しているなら、同様のアプローチがうまくいくはずです:CREATION_COMPLETEイベントを待ってから、子を2つのVBoxコントロールに再配置します。

于 2010-02-03T16:56:40.457 に答える
0

それらをHBoxに入れますか?

于 2010-02-01T16:52:05.563 に答える
0

私はHBoxと2つのフォームを使ってこれに似た何かをしました。動的に、各フォームに子を交互に追加できます。

于 2010-02-01T17:46:17.200 に答える
0

タイルコンテナを使用して、方向プロパティを必要な流れの方向に設定してみませんか?

于 2010-02-01T20:58:56.240 に答える
0

direction="horizo​​ntal"のタイルコンテナでうまくいくと思います

于 2010-06-24T11:15:16.433 に答える