Apache flex 如何在flex中为自定义组件编写事件?
我已经编写了一个自定义组件,用于在Flex中绘制圆。但当我尝试为该组件编写click事件或mouseDown事件时,它不起作用 我在VBox中有圆组件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
<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>