这个很奇怪:
我的应用程序工作正常,但突然该死的ListView控件的事件不再被引发.它只是来来去去,没有任何明确的理由.(显然)我已将AllowDrop属性设置为True并处理DragEnter,DragOver和DragDrop事件,如下所示:
Private Sub lstApplications_DragDrop(ByVal sender As Object, ByVal e As System.Windows.Forms.DragEventArgs) Handles lstApplications.DragDrop, Me.DragDrop
m_fileNames = CType(e.Data.GetData(DataFormats.FileDrop), String())
mnuType.Show(Cursor.Position, ToolStripDropDownDirection.BelowLeft)
End Sub
Private Sub lstApplications_DragEnter(ByVal sender As Object, ByVal e As System.Windows.Forms.DragEventArgs) Handles lstApplications.DragEnter, Me.DragEnter, lstApplications.DragOver, Me.DragOver
If chkMode.Checked OrElse Not e.Data.GetDataPresent(DataFormats.FileDrop, True) Then
e.Effect = DragDropEffects.None
Else
e.Effect = DragDropEffects.Copy
End If
End Sub
Run Code Online (Sandbox Code Playgroud)
我在这两个方法中编写的代码无关紧要,因为没有引发任何事件.这里有什么我想念的吗?
我在另一台机器上运行相同的应用程序,它工作正常.然后我重新启动了自己的机器,一切都开始了.我不确定,但似乎Windows出了问题.
我有两个QListWidget(list1和list2)
list1 应该能够从中接收物品 list2list1 应该能够通过内部拖放重新组织list2 应该能够从中接收物品 list1list1->setSelectionMode(QAbstractItemView::SingleSelection);
list1->setDragEnabled(true);
list1->setDragDropMode(QAbstractItemView::DragDrop);
list1->viewport()->setAcceptDrops(true);
list1->setDropIndicatorShown(true);
ulist2->setSelectionMode(QAbstractItemView::SingleSelection);
list2->setDragEnabled(true);
list2->setDragDropMode(QAbstractItemView::InternalMove);
list2->viewport()->setAcceptDrops(true);
list2->setDropIndicatorShown(true);
Run Code Online (Sandbox Code Playgroud)
我不得不把它list2打开,InternalMove否则当我把它拖到它时,项目不会删除list1.
如果我把list1给InternalMove我不能删除任何更多的就可以了.
我是否必须编写自己的拖放功能才能执行此操作?
我希望能够反复拖放相同的源元素.
在拖动图像的那一刻,它被成功克隆 - 即原始图像保持不变并且克隆很好地落入其新位置,但旧图像不再可拖动.检查元素显示class为属性(无值),即不显示class="ui-draggable"
正如你所看到的那样,我试图在克隆之后重新启用可拖动性,但它无法正常工作.
这是代码:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.5.0/jquery.min.js"></script>
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jqueryui/1.8.9/jquery-ui.min.js"></script>
<title></title>
<script language="javascript" type="text/javascript">
var copy = 0;
var dragOptions = {
helper: 'clone',
cursor: 'hand',
revert: 'invalid'
};
$(document).ready(function () {
$("img").draggable(dragOptions);
$("ul#bag > li").droppable({
drop: function (event, ui) {
copy++;
var clone = $(ui.draggable).clone().attr("id", "img_" + copy);
$(this).append(clone);
clone.css("left", 0).css("top", 0);
$(ui.draggable).draggable(dragOptions);
}
});
});
</script>
<style type="text/css">
li
{
position: relative; …Run Code Online (Sandbox Code Playgroud) 我正在尝试将Finder拖放到我的应用程序的NSTableView中.该设置使用一个NSTableView数组控制器,它使用Cocoa绑定到Core Data存储区作为数据源.
我做了以下,基本上是我在SO和其他网站上发现的各种博文:
在awakeFromNib我的视图控制器中,我打电话给:
[[self sourcesTableView] registerForDraggedTypes:[NSArray arrayWithObjects: NSPasteboardTypePNG, nil]];
Run Code Online (Sandbox Code Playgroud)
我将NSArrayController子类化,并将以下方法添加到我的子类中(子类化的原因是数组控制器需要被告知drop,因为它充当表视图的数据源):
- (BOOL) tableView: (NSTableView *) aTableView acceptDrop: (id < NSDraggingInfo >) info row: (NSInteger) row dropOperation: (NSTableViewDropOperation)operation
Run Code Online (Sandbox Code Playgroud)
我上面的实现目前只写入日志然后返回一个布尔值YES.
- (NSDragOperation) tableView: (NSTableView *) aTableView validateDrop: (id < NSDraggingInfo >) info proposedRow: (NSInteger) row proposedDropOperation: (NSTableViewDropOperation) operation
Run Code Online (Sandbox Code Playgroud)
在IB中我有数组控制器指向我的自定义NSArrayController子类.
结果:没有.当我将PNG从桌面拖到我的桌面视图上时,没有任何反应,文件很快就会弹回原点.我一定做错了什么但不明白什么.我哪里错了?
我想要实现的是:
在前端,我使用html5文件api来读取文件,然后使用ajax将文件的内容上传到php后端,如果文件大小很小就可以了.但是,如果文件足够大,则会导致chrome崩溃.所以我使用file.slice将大文件拆分成块,当所有块都上传到php时,将块合并为一个完整的块.
代码如下:
前端:
<style>
#container {
min-width:300px;
min-height:200px;
border:3px dashed #000;
}
</style>
<div id='container'>
</div>
<script>
function addDNDListener(obj){
obj.addEventListener('dragover',function(e){
e.preventDefault();
e.stopPropagation();
},false);
obj.addEventListener('dragenter',function(e){
e.preventDefault();
e.stopPropagation();
},false);
obj.addEventListener('drop',function(e){
e.preventDefault();
e.stopPropagation();
var ul = document.createElement("ul");
var filelist = e.dataTransfer.files;
for(var i=0;i<filelist.length;i++){
var file = filelist[i];
var li = document.createElement('li');
li.innerHTML = '<label id="'+file.name+'">'+file.name+':</label> <progress value="0" max="100"></progress>';
ul.appendChild(li);
}
document.getElementById('container').appendChild(ul);
for(var i=0;i<filelist.length;i++){
var file = filelist[i];
uploadFile(file);
}
},false);
}
function uploadFile(file){
var loaded = 0;
var step = 1024*1024;
var …Run Code Online (Sandbox Code Playgroud) 我有一个包含16x16px跨度的div.我希望在用户点击并拖动此图标时启动拖动事件,但它应该拖动整个div.我正在尝试按照本教程:http://www.html5rocks.com/en/tutorials/dnd/basics/
我不知道如何用手柄做这个.请恭喜.
我正在尝试创建一个Windows窗体,我可以删除文件/文件夹.
我在WinForms应用程序中有以下代码
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void Form1_DragEnter(object sender, DragEventArgs e)
{
Debug.Print("DragEnter");
}
private void Form1_DragDrop(object sender, DragEventArgs e)
{
MessageBox.Show("Dropped!");
}
}
Run Code Online (Sandbox Code Playgroud)
我已将AllowDrop属性设置为true.我已经尝试在Visual Studio中的调试中运行该应用程序.基于其他类似问题的答案,我尝试以管理员身份运行已编译的exe.我已经尝试不以管理员身份运行已编译的exe .
但无论我做什么,我都无法触发DragDrop事件.但是,DragEnter事件会触发.我错过了什么?
我正在实现填充空白拖放功能.
在这里,我有一个上面的答案列表,即一个,两个,三个等,以及下面的空白区域,这些答案将被填充.
事情已经完成
1)从答案列表中拖动选项并填写空框.完成
2)如果我将答案从填充框拖到空框中,则前一个值应为空白.完成
问题来了
1)如果我将答案从填充框拖到另一个填充框中,那么如何切换两个框的值和位置.我认为我们可以获得前一个和当前一个的位置,然后交换位置但不知道如何实现它.
2)如果我将一个值从答案列表拖到一个填充的框中,那么如何交换它们
这是我到目前为止所做的:
$(document).ready(function() {
var arr;
$("span").droppable({
accept: "ul > li",
classes: {
"ui-droppable-hover": "ui-state-hover"
},
drop: function(event, ui) {
arr = [];
var dragedElement = ui.draggable.text();
$(this).addClass("ui-state-highlight");
$(this).html(dragedElement);
$('span').each(function() {
arr.push($(this).text());
});
//console.log(JSON.stringify(arr));
var matched = arr.filter((value) => value == dragedElement);
//console.log(JSON.stringify(matched));
$('span').each(function() {
if ($(this).text() == matched[1]) {
$(this).addClass('matched');
//localStorage.setItem('prevValue', $(this).text());
$('span.matched').text('');
$(this).removeClass("ui-state-highlight");
$(this).removeClass('matched');
}
});
$(this).html(dragedElement);
$(this).addClass("ui-state-highlight");
}
}); …Run Code Online (Sandbox Code Playgroud)我在Chrome上有拖放问题(v69.0.3497.100).具体来说,当Windows缩放不是100%时,一些拖放事件会被触发,即使它们不应该被触发.
查看stackblitz示例,并尝试在其自身上拖动"蓝色"矩形(只需拖动,向下移动一点并放下).如果Windows缩放设置为100%(浏览器缩放也是100%),则会dragEnter按预期触发一个事件()(检查控制台).但是,如果Windows缩放设置为125%(但浏览器缩放仍为100%),则会触发三个事件(两个dragEnter和一个dragLeave),并且我预计只有一个事件被触发,因为元素被拖放到自身上(如这是100%规模水平的情况).
可能是因为这是Windows缩放(而不是浏览器的缩放),左边("lightred")矩形比它看起来更大,并且它在右边的矩形下面,并且事件传播到它,尽管我无法证明因为检查员中的所有元素都具有正确的大小.
在最新的Firefox,IE或Edge中似乎没有发生这种情况.
有谁知道为什么会发生这种情况以及如何解决这个问题?
谢谢.
drag-and-drop ×10
javascript ×3
html ×2
html5 ×2
jquery ×2
winforms ×2
.net ×1
c# ×1
cocoa ×1
css ×1
delphi ×1
delphi-xe ×1
events ×1
filereader ×1
finder ×1
listview ×1
php ×1
qlistwidget ×1
qt ×1