是否有一种简单的方法可以确保在拖放操作无法完成后,MouseUp事件不被框架消耗掉并被忽略?
我找到了一篇描述一种机制的博客文章,但它涉及大量的手工簿记,包括状态标志,MouseMove事件,手动"鼠标离开"检查等等.如果它可以,我宁愿不必实施所有这些.避免.
我正在尝试从我的应用程序的Winforms部分拖动数据包含在"ElementHost"中的WPF控件上.当我尝试这样做时它会崩溃.
尝试相同的东西,但从Winforms到Winforms工作正常.(参见下面的示例代码)
我需要帮助才能完成这项工作......有什么线索我做错了什么?
谢谢!
示例:
在下面的示例代码中,我只是尝试拖动在标签控件上启动拖动时创建的自定义MyContainerClass对象1)System.Windows.Forms.TextBox(Winforms)和2)System.Windows.TextBox (WPF,添加到ElementHost).
情况1)工作正常但案例2)在尝试使用GetData()检索丢弃数据时崩溃.GetDataPresent("WindowsFormsApplication1.MyContainerClass")返回"true"所以从理论上讲,我应该能够像在Winforms中那样检索那种类型的drop数据.
这是崩溃的堆栈跟踪:
"Error HRESULT E_FAIL has been returned from a call to a COM component" with the following stack trace: at System.Runtime.InteropServices.Marshal.ThrowExceptionForHRInternal(Int32 errorCode, IntPtr errorInfo) at System.Windows.Forms.DataObject.GetDataIntoOleStructs(FORMATETC& formatetc, STGMEDIUM& medium) at System.Windows.Forms.DataObject.System.Runtime.InteropServices.ComTypes.IDataObject.GetDataHere(FORMATETC& formatetc, STGMEDIUM& medium) at System.Windows.Forms.DataObject.System.Runtime.InteropServices.ComTypes.IDataObject.GetData(FORMATETC& formatetc, STGMEDIUM& medium) at System.Windows.DataObject.OleConverter.GetDataInner(FORMATETC& formatetc, STGMEDIUM& medium) at System.Windows.DataObject.OleConverter.GetDataFromOleHGLOBAL(String format, DVASPECT aspect, Int32 index) at System.Windows.DataObject.OleConverter.GetDataFromBoundOleDataObject(String format, DVASPECT aspect, Int32 index) at System.Windows.DataObject.OleConverter.GetData(String format, Boolean autoConvert, DVASPECT aspect, Int32 index) at System.Windows.DataObject.OleConverter.GetData(String format, Boolean autoConvert) …
我正在重写基于Windows窗体的应用程序,我将使用WPF.该应用程序在非常图形化的环境中严重依赖拖放技术.通过将元素拖动到网格上,移动它们,右键单击设置属性等来使用"设计"报告等,所有这些都保存到数据库中.还可以通过绘制流程图来控制程序流程,通过路由和决策制作,全部绘制在表单上,然后再保存到数据库中.
MVVM是否适用于这种应用,或者我是否试图在方孔中安装圆形钉.
你的想法很有用.
在Delphi XE中,我可以允许我的表单接受文件"拖放"但不必处理裸窗口消息吗?
谷歌浏览器有一个方便的功能,我可以点击下载链接并将其拖到Windows资源管理器窗口,然后删除.删除后,Chrome会下载该文件,然后它会显示在我删除的位置.
我希望能够从谷歌浏览器中删除我的应用程序,但似乎并非如此简单.我有一个名为gridFiles的DataGridView,以及以下代码:
Private Sub gridFiles_DragDrop(ByVal sender As Object, ByVal e As System.Windows.Forms.DragEventArgs) Handles gridFiles.DragDrop
If e.Data.GetDataPresent(DataFormats.FileDrop) Then
Dim DroppedFiles() As String = e.Data.GetData(DataFormats.FileDrop)
If Not DroppedFiles Is Nothing Then
For Each file As String In DroppedFiles
MsgBox(file)
Next
End If
End If
End Sub
Private Sub gridFiles_DragEnter(ByVal sender As Object, ByVal e As System.Windows.Forms.DragEventArgs) Handles gridFiles.DragEnter
If e.Data.GetDataPresent(DataFormats.FileDrop) Then
e.Effect = DragDropEffects.All
End If
End Sub
Run Code Online (Sandbox Code Playgroud)
当我从Windows资源管理器中将文件拖放到它上面时,一切正常,我为每个被删除的文件都有一个消息框.但是,当我从Chrome中删除时,没有任何反应.原因是它DroppedFiles等于Nothing.似乎e.Data.GetData没有返回任何东西.我已经检查与格式e.Data.GetFormats()并将其返回FileDrop,FileName,FileNameW …
我正在Windows和X上实现Qt的拖放API .当我在X上运行的应用程序中拾取一个对象并将其拖动时,它会在下面的窗口上留下一条白色的幽灵痕迹,就像下面的窗口缓慢重新绘制被拖动的对象先前遮挡其中一部分的位置一样.
我认为这是Qt刚刚通过调整窗口大小来解决X窗口中子窗口小部件闪烁的问题- 即拖动的对象被视为单独的本机窗口,因此X处理从拖动对象到剪辑的对象下面的窗口.由于X以与Qt不同的方式执行此操作,因此我们获得了重影效果.
有谁遇到过同样的问题?我想到的一个解决方案是使用与上面链接的博客文章中详述的相同技术,并停止拖动对象被视为本机窗口,可能以拖放为代价仅限于我的应用程序(我没有问题).有谁知道如何强制拖放操作只是内部?
编辑:我正在使用QDrag::setPixmap设置拖动对象的图形表示 - 重要的是我保留这个以支持标准拖动光标,因为此接口正在触摸屏设备上使用,因此没有可见光标.
是否可以在gestureOverlay视图中添加布局并将其拖放到android中的所需位置.我能够添加一个布局,但无法拖放它.我想知道是否可以在2.2版本中执行此操作?
我真的有时间搞清楚这个,到目前为止找不到任何有相关经验的朋友.在我发布我的第一个应用程序之前,这是我非常最后的功能,所以它让我疯狂,因为它已经陷入困境,最终即将结束!
如果我将物体放在可接受的区域,我的拖放效果会很好.但是,如果丢弃在其他地方我没有得到事件,并且在失败的拖放操作后无法清理.我需要触发ACTION_DRAG_ENDED事件.但是,如果我使用值为true的ACTION_DRAG_STARTED响应(意味着它可以接受该对象),则仅触发(根据文档).问题是ACTION_DRAG_STARTED没有解雇!
所以我认为问题的关键在于我没有得到ACTION_DRAG_STARTED.我在这里放置了所有相关的拖拽代码(或至少几乎全部):
private OnTouchListener onTouchListener = new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
if (event.getAction() == MotionEvent.ACTION_DOWN) {
Item current = (Item) ((View) v.getTag()).getTag();
//ClipData data = ClipData.newPlainText("test", "testText");
View dragView = (View) v.getTag();
DragShadowBuilder shadowBuilder = new ItemDragShadowBuilder(dragView,
new Point(v.getWidth()/2, v.getHeight()/2));
dragSource = dragView;
v.startDrag(null, shadowBuilder, current, 0);
dragView.setVisibility(View.INVISIBLE);
return true;
} else {
return false;
}
}
};
private static class ItemDragShadowBuilder extends View.DragShadowBuilder {
private Point touchPoint = null;
private Point sizePoint …Run Code Online (Sandbox Code Playgroud) 我正在构建一个chrome扩展,它将允许用户拖放文件并将其保存到服务器.从扩展中我div在页面中注入了一个元素,当我删除图像文件时,浏览器在整个页面上显示图像.drop在扩展中未检测到该事件,但如果我有一个带有类型文件的输入元素,并且如果我将该文件放在该元素上,则会change检测到该事件.
不确定如何drop从扩展中检测事件.任何帮助表示赞赏.
contentScript.js文件
//building the Dropzone Div
var dropdiv = $("<div>", {
id :"sforce-dz-dropZone",
class : "sforce-dz-dropZonebg"
}).text('Add you\'re files here');
//injecting the drop div in the page
$("input[name=attachFile]").after(dropdiv);
//adding 'drop' event listener to the div.
//This is not getting logged at all.
$("#sforce-dz-dropZone").on('drop', function(e){
e.preventDefault();
e.stopPropagation();
var files = e.target.files || e.dataTransfer.files;
// process all File objects
for (var i = 0, f; f = files[i]; i++) {
console.log('the file name …Run Code Online (Sandbox Code Playgroud)