Подчеркивание _
считается переменной «I do not Care» или «Throwaway» в Python
_
, >>> 10
10
>>> _
10
>>> _ * 3
30
_
также используется для игнорирования конкретных значений. Если вам не нужны конкретные значения или значения не используются, просто назначьте значения для подчеркивания. Игнорировать значение при распаковке x, _, y = (1, 2, 3)
>>> x
1
>>> y
3
Игнорировать индекс for _ in range(10):
do_something()
Да, перетаскивание отличается в AIR. Я НЕНАВИЖУ это! Требуется большое проигрывание вокруг, чтобы выяснить, как получить вещи работать то же пользовательским dnd, который был создан в гибком проводе.
Что касается координат, возможно, играйте вокруг с localToContent и localToGlobal методами. Они могут помочь в переводе координат к чему-то полезному.
Удачи. Я сообщу, думаю ли я о чем-либо еще.
Вы используете только dragEnter метод? При попытке отклонить перетаскивание при тихом перетаскивании по тому же компоненту, необходимо использовать и dragEnter и dragOver методы.
Проверьте этот пример:
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute">
<mx:Script>
<![CDATA[
import mx.core.DragSource;
import mx.managers.DragManager;
import mx.events.DragEvent;
private function onDragEnter(e:DragEvent):void {
if ( e.target == lbl ) {
if ( e.localX < lbl.width/2 ) {
trace("accept");
DragManager.acceptDragDrop(this);
}
else {
DragManager.acceptDragDrop(null);
}
}
}
private function doStartDrag(e:MouseEvent):void {
if ( e.buttonDown ) {
var ds:DragSource = new DragSource();
ds.addData("test", "text");
DragManager.doDrag(btn, ds, e);
}
}
]]>
</mx:Script>
<mx:Label id="lbl" text="hello world!" left="10" top="10" dragEnter="onDragEnter(event)" dragOver="onDragEnter(event)" />
<mx:Button id="btn" x="47" y="255" label="Button" mouseMove="doStartDrag(event)"/>
</mx:Application>
Если Вам не нужно собственное перетаскивание в AIR, можно получить поведение перетаскивания Flex путем разделения на подклассы WindowedApplication и установки DragManager. См. это сообщение на Adobe Jira для большего количества информации: https://bugs.adobe.com/jira/browse/SDK-13983
хорошо, я вижу проблему теперь. Вместо того, чтобы аннулировать, попытайтесь установить его на dragInitiator.
Проверьте это.
<?xml version="1.0" encoding="utf-8"?>
<mx:WindowedApplication xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute">
<mx:Script>
<![CDATA[
import mx.controls.Alert;
import mx.events.DragEvent;
import mx.managers.DragManager;
import mx.core.DragSource;
private function doStartDrag(e:MouseEvent):void {
if ( e.buttonDown && !DragManager.isDragging ) {
var ds:DragSource = new DragSource();
ds.addData("test", "test");
DragManager.doDrag(btn, ds, e);
}
}
private function handleDragOver(e:DragEvent):void {
if ( e.localX < cvs.width/2 ) {
//since null does nothing, lets just set to accept the drag
//operation, but accept it to the dragInitiator
DragManager.acceptDragDrop(e.dragInitiator);
}
else {
//accept drag
DragManager.acceptDragDrop(cvs);
DragManager.showFeedback( DragManager.COPY );
}
}
private function handleDragDrop(e:DragEvent):void {
if ( e.dragSource.hasFormat("test") ) {
Alert.show("Got a drag drop!");
}
}
]]>
</mx:Script>
<mx:Canvas x="265" y="66" width="321" height="245" backgroundColor="#FF0000" id="cvs" dragOver="handleDragOver(event)" dragDrop="handleDragDrop(event)">
</mx:Canvas>
<mx:Button id="btn" x="82" y="140" label="Drag Me" mouseDown="doStartDrag(event)"/>
</mx:WindowedApplication>