Apache flex 如何在flex中为自定义组件编写事件?

Apache flex 如何在flex中为自定义组件编写事件?,apache-flex,events,custom-component,Apache Flex,Events,Custom Component,我已经编写了一个自定义组件,用于在Flex中绘制圆。但当我尝试为该组件编写click事件或mouseDown事件时,它不起作用 我在VBox中有圆组件 <mx:VBox label="Currents Quote" width="100%" backgroundColor="#DDDDDD"> <comp:MyCircle id="circlle" x1="175" y1="150" radius="140" click='{Ale

我已经编写了一个自定义组件,用于在Flex中绘制圆。但当我尝试为该组件编写click事件或mouseDown事件时,它不起作用

我在VBox中有圆组件

 <mx:VBox label="Currents Quote" width="100%" backgroundColor="#DDDDDD">

<comp:MyCircle id="circlle" x1="175" y1="150" 
                    radius="140" click='{Alert.show("Hello");}'
                    mouseDown="handleMouseDown(event);"/>
<comp:MyLine x1="175" y1="104"/> 
 </mx:VBox>

  private function handleMouseDown(event:MouseEvent):void {

        var pt:Point = new Point(event.localX, event.localY);
        pt = event.target.localToGlobal(pt);   
        pt = circlle.globalToContent(pt);   
        var whichColor:String = "border area";

        if (pt.x < 150) {
            if (pt.y < 150)
                whichColor = "red";
            else
                whichColor = "blue";
        }
        else {
            if (pt.y < 150)
                whichColor = "green";
            else
                whichColor = "magenta";
        }

        Alert.show("You clicked on the " + whichColor);
      }
“Hello”(你好)警报仅在特定点显示,在该点,猜测是圆的x、y坐标(175150)。但它不应该显示在我点击MyCircle组件的任何地方吗??如何以这种方式启用它

此外,mouseDown函数对MyCircle不起作用,但如果有VBox的事件,则会显示警报。为什么会这样?有人能指引我吗


我是否应该以不同的方式为自定义组件编写事件?

我不确定这是否适用,但存在一个错误,某些UIComponents无法正确识别click/mouseDown事件,除非它们具有背景色。查看向圆圈添加背景色是否有帮助。

代码中也有一些错误,例如,actionscript周围缺少脚本标记,可能需要导入警报

 <mx:VBox label="Currents Quote" width="100%" backgroundColor="#DDDDDD">

<comp:MyCircle id="circlle" x1="175" y1="150" 
                    radius="140" click='{Alert.show("Hello");}'
                    mouseDown="handleMouseDown(event);"/>
<comp:MyLine x1="175" y1="104"/> 
 </mx:VBox>

<mx:Script>
<![CDATA[
  private function handleMouseDown(event:MouseEvent):void {

        var pt:Point = new Point(event.localX, event.localY);
        pt = event.target.localToGlobal(pt);   
        pt = circlle.globalToContent(pt);   
        var whichColor:String = "border area";

        if (pt.x < 150) {
            if (pt.y < 150)
                whichColor = "red";
            else
                whichColor = "blue";
        }
        else {
            if (pt.y < 150)
                whichColor = "green";
            else
                whichColor = "magenta";
        }

        Alert.show("You clicked on the " + whichColor);
      }
]]>
</mx:Script>


是的,的确如此。。我更改了背景颜色,现在事件被触发。非常感谢:-)我在这方面找到了一些背景,似乎单击无背景项目的边框会产生一个单击事件,甚至是其中的文本。这同样适用于拖放事件中的拖放接受。设计者的初衷可能是,缺少视觉表现使控件透明,甚至对事件也是如此。这甚至可能不是一个真正的bug,我可以想出一些方法来积极地使用这种控制,但是当我们不知道它的时候,它会让我们沮丧不已。我有那些标签。。我只是没有在这里写完整的代码。。认为只有功能是重要的,而忽略了这些部分…-)哦,哈哈。。。一定要注意,如果这样做,我们中的一些人很容易感到困惑;)
 <mx:VBox label="Currents Quote" width="100%" backgroundColor="#DDDDDD">

<comp:MyCircle id="circlle" x1="175" y1="150" 
                    radius="140" click='{Alert.show("Hello");}'
                    mouseDown="handleMouseDown(event);"/>
<comp:MyLine x1="175" y1="104"/> 
 </mx:VBox>

<mx:Script>
<![CDATA[
  private function handleMouseDown(event:MouseEvent):void {

        var pt:Point = new Point(event.localX, event.localY);
        pt = event.target.localToGlobal(pt);   
        pt = circlle.globalToContent(pt);   
        var whichColor:String = "border area";

        if (pt.x < 150) {
            if (pt.y < 150)
                whichColor = "red";
            else
                whichColor = "blue";
        }
        else {
            if (pt.y < 150)
                whichColor = "green";
            else
                whichColor = "magenta";
        }

        Alert.show("You clicked on the " + whichColor);
      }
]]>
</mx:Script>