Archive for 2009/12/8
flexのDataGridで縦と横のスクロールバーがあるか調べる。
しかしながら、標準のメソッドではこの方法が見つからないので・・・
以下のmx_internalなメソッドを使って調べる。
mx_internal::scroll_verticalScrollBar; mx_internal::scroll_horizontalScrollBar;
どうやら、スクロールバーがあるかどうかは、
1)nullが返ってきたとき。
2)visible=falseだったとき。
のようである。
このメソッド(getter)はScrollControlBaseのメソッドなのでかなりの広範囲で使えるだろう。
ただし、あくまでもmx_internalなメソッドなので使用の際にはそのことをお忘れなく。。。。
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute"
creationComplete="init()"
updateComplete="update()"
>
<mx:Script>
<![CDATA[
import mx.core.ScrollPolicy;
import mx.controls.scrollClasses.ScrollBar;
import mx.collections.ArrayCollection;
private function init():void{
// データを作成する
var src:Array = new Array();
for(var i:int = 0; i<30; i++){
var obj:Object = new Object();
obj.label = "ラベル" + i;
obj.idx = i;
src.push(obj);
}
dg.dataProvider = new ArrayCollection(src);
}
private function update():void{
var vs:ScrollBar = dg.mx_internal::scroll_verticalScrollBar;
var hs:ScrollBar = dg.mx_internal::scroll_horizontalScrollBar;
if(vs){
if(vs.visible){
vlog.text =" Found !! " + vs.width;
}
else{
vlog.text = "Found !! But not visible";
}
}
else{
vlog.text = "*NOT* found ...";
}
if(hs){
if(hs.visible){
hlog.text = "Found !!" + hs.height;
}
else{
hlog.text =" Found !! But not visible";
}
}
else{
hlog.text = "*NOT* found ...";
}
}
private function changeHBar():void{
if(hbar.selected){
dg.horizontalScrollPolicy = ScrollPolicy.ON;
}
else{
dg.horizontalScrollPolicy = ScrollPolicy.OFF;
}
}
]]>
</mx:Script>
<mx:VBox width="100%" height="100%">
<mx:DataGrid width="100%" height="90%" id="dg">
<mx:columns>
<mx:DataGridColumn headerText="LABEL" dataField="label" minWidth="150"/>
<mx:DataGridColumn headerText="INDEX" dataField="idx" minWidth="150"/>
</mx:columns>
</mx:DataGrid>
<mx:CheckBox id="hbar" change="changeHBar()"/>
<mx:HBox>
<mx:Label text="VerticalScrollBar" />
<mx:Label id="vlog" />
</mx:HBox>
<mx:HBox>
<mx:Label text="HorizontalScrollBar" />
<mx:Label id="hlog" />
</mx:HBox>
</mx:VBox>
</mx:Application>


