代码之家  ›  专栏  ›  技术社区  ›  Adam Tuttle

flex 3:如何确定一个通用对象是否实际上是一个按钮?

  •  0
  • Adam Tuttle  · 技术社区  · 15 年前

    我有这段代码,但它不能像我预期的那样工作。btnontainer是一个包含大量按钮的vbox(toggle=true);我希望将它们重置为在某个点上未切换。

    for (var btn:Object in btnContainer.getChildren()){
        if (btn.isPrototypeOf(mx.controls.Button)){
            btn.selected = false;
        }
    }
    

    使用上面的代码,“btn”在循环的每次迭代(0,1,2,3,…)中仅显示为索引,条件从不计算为true。

    我也尝试过:

    for (var btn:Button in btnContainer.getChildren()){
        btn.selected = false;
    }
    

    这样做很好,除了btnontainer中还有一个标签;所以当尝试将标签转换为按钮时,它会抛出一个错误。

    我做错什么了?

    2 回复  |  直到 11 年前
        1
  •  4
  •   hasseg    15 年前

    如果要循环遍历数组元素,请使用“ for each..in “循环,如果要查看变量是否与给定类型(例如给定类的实例)兼容,请使用 is 操作员。

    语言参考有 an example 对于这种情况。

    这是固定代码:

    for each (var btn:Object in btnContainer.getChildren()){
        if (btn is Button){
            btn.selected = false;
        }
    }   
    
        2
  •  2
  •   Mr. Polywhirl    11 年前

    你试过用吗 is ?

    import mx.controls.Button;
    
    //...
    for (var key in btnContainer.getChildren()){
        var obj : Object = btnContainer[key];
        if (obj is Button){
            var button : Button = obj as Button;
            button.selected = false;
        }
    }