Tag: 拖放

C#从listBox拖放

我正在尝试构建一个简单的界面,允许用户将文件放入listBox以将其添加到进程,并将其拖出以删除它们。 一切都很好,但我想添加一个function,使它更复杂一点。 现在,我删除了与DragLeave事件绑定的项目,这意味着只要鼠标离开该框,项目就会被删除。 但我希望用户能够改变他们的想法。 换句话说,如果他们意识到他们正在拖出错误的文件,我希望他们能够将鼠标移回listBox并释放鼠标以取消操作。 我在想这意味着我需要能够捕获MouseUp事件而不是DragLeave事件。 但到目前为止还没有成功。 下面是我目前用于删除拖出文件的代码。 如何修改以防止文件从列表中删除,直到用户按下鼠标按钮为止? private void listBox1_MouseDown(object sender, MouseEventArgs e) { if (listBox1.Items.Count == 0) { return; } int index = listBox1.IndexFromPoint(eX, eY); string s = listBox1.Items[index].ToString(); DragDropEffects dde1 = DoDragDrop(s, DragDropEffects.All); } private void listBox1_DragLeave(object sender, EventArgs e) { ListBox lb = sender as ListBox; lb.Items.Remove(lb.SelectedItem); } 编辑2013/05/16 到目前为止的评论和答案都很有用,但我发现我的问题不够明确。 […]

C#将文件拖放到表单中

如何通过拖放将文件加载到表单? 会出现哪个事件? 我应该使用哪个组件? 以及如何在将文件拖放到表单后确定文件名和其他属性? 谢谢! 码 private void panel1_DragEnter(object sender, DragEventsArgs e){ if (e.Data.GetDataPresent(DataFormats.Text)){ e.Effect = DragDropEffects.Move; MessageBox.Show(e.Data.GetData(DataFormats.Text).toString()); } if (e.Data.GetDataPresent(DataFormats.FileDrop)){ } } 好的,这很有效。 文件怎么样? 我怎样才能获得文件名和扩展名? 这只是一个dragEnter动作。

如何处理GetDataPresent让它接受所有派生类型

我正在使用drgevent.Data.GetDataPresent来确定拖动的组件是否可接受。 我有一个问题,就是我想接受一个特定的类型,比如SomeType和从中派生的所有类型。 似乎GetDataPresent不支持此类要求。 任何的想法?

将大型虚拟文件从C#拖放到Windows资源管理器中

我有一个C#WPF应用程序,其中一个部分充当FTP客户端,列出远程服务器上的文件并允许用户下载它们。 我希望用户能够将文件列表中的文件拖放到他们自己的机器上(即进入Windows资源管理器shell)。 为了实现这一点,我使用了Delay的博客中的VirtualFileDataObject代码 ,使用了SetData的Action重载。 这适用于较小的文件。 我的问题是:我正在处理的一些文件非常大(2+ GB),而VirtualFileDataObject类处理流的方式涉及将整个内容读入内存,这最终会导致“存储空间不足”那些非常大的文件的错误。 VirtualFileDataObject代码的相关部分如下所示。 如何重写此代码以不要求整个流在内存中? public void SetData(short dataFormat, int index, Action streamData) { _dataObjects.Add( new DataObject { FORMATETC = new FORMATETC { cfFormat = dataFormat, ptd = IntPtr.Zero, dwAspect = DVASPECT.DVASPECT_CONTENT, lindex = index, tymed = TYMED.TYMED_ISTREAM }, GetData = () => { // Create IStream for data var ptr […]

WatiN FireEvent不在FireFox中传递事件属性

这已被记录为sourceforge中的一个错误,但现已删除。 我正在使用FireFox 3.6和相关的jssh。 我可以在Firebug中看到事件属性没有被设置。 我正在尝试拖放下面的代码 var mouseDownEvent = new NameValueCollection {{“button”, “1”}, {“clientX”, “0”}, {“clientY”, “0”}}; firstStoryRow.FireEventNoWait(“onmousedown”, mouseDownEvent); 有传递这些属性的变通方法但不是很好。 有人知道这是否是WatiN中的真正限制或者我做错了什么?

拖放动态创建的快捷方式

我有一个C#应用程序,它创建了用于启动具有特定参数和初始目录的其他程序的快捷方式。 我希望用户能够从Windows窗体拖动一个快捷方式,并将其放在任何相关的位置,如桌面,开始菜单等,但我真的不知道如何处理,有人可以指出我正确的方向? 我已经看过一些使用PInvoke和IShellLink的样本,或者像这里一样阅读SO上的答案,这已经有助于创建快捷方式并将它们保存在.lnk文件中。 我假设当用户启动拖动操作时,我必须在DoDragDrop()调用中移交数据,例如通过处理MouseDown信号。 就我而言,我想我需要知道目标期望接受丢弃的确切类型,以及如何序列化快捷方式,但无法找到该部分的任何信息。 也许另一个选择是获取drop的位置,并从我的应用程序中管理它,但是我再次对如何做到这一点有点无能为力。 框架版本目前是3.5,我只考虑Windows平台。 在此先感谢您的帮助! 更新/解决方案: 使用上面提到的ShellLink代码创建临时快捷方式文件,我只是使用DataObject进行拖放,如下例所示: private void picShortcut_MouseDown(object sender, MouseEventArgs e) { ShellLink link = new ShellLink(); // Creates the shortcut: link.Target = txtTarget.Text; link.Arguments = txtArguments.Text; link.Description = txtDescription.Text; link.IconPath = txtIconFile.Text; link.IconIndex = (txtIconIndex.Text.Length > 0 ? System.Int32.Parse(txtIconIndex.Text) : 0); link.Save(“tmp.lnk”); // Starts the drag-and-drop operation: DataObject shortcut […]

如何在silverlight中拖放“盒子”

我有一个像这样的盒子,现在我试图拖放盒子,用矩形和其他对象我做了,但有了这个我不知道该怎么办。 这是我如何做框的代码 XAML: c#代码: public partial class MyBox : UserControl { public static readonly DependencyProperty HeaderProperty = DependencyProperty.Register(“Header”, typeof(string), typeof(MyBox),null); public static readonly DependencyProperty TextProperty = DependencyProperty.Register(“Content”, typeof(string), typeof(MyBox),null); public string Header { get { return GetValue(HeaderProperty) as string; } set { SetValue(HeaderProperty, value); } } public string Text { get { return GetValue(TextProperty) as […]

WPF:将虚拟文件拖放到Windows资源管理器中

我正在开发一个类似于dropbox的应用程序,我在WPF列表视图中显示远程文件。 我想拖动这些元素并将其放入Windows资源管理器中。 我见过这样的代码: var dataObject = new DataObject(DataFormats.FileDrop, files.ToArray()); dataObject.SetData(DataFormats.StringFormat, dataObject); DoDragDrop(dataObject, DragDropEffects.Copy); 但是你可能认为,那些文件还没有在本地系统上,在复制它们之前我需要连接到服务器,下载并解压缩文件。 就像一个ftp客户端一样。 我不知道怎么做,但我想知道是否有任何“掉落”事件或类似我能处理。 谢谢!

使用HTML5在Asp.net中拖放来上传文件

我试图使用HTML5的DnD和File API上传文件。 我不确定如何将表单数据发送到服务器,我尝试使用XMLHttpRequest发送,但没有成功。 这就是我到目前为止所拥有的。 Drop files here if (window.File && window.FileList && window.FileReader) { var dropZone = document.getElementById(‘drop_area’); dropZone.addEventListener(‘dragover’, handleDragOver, false); dropZone.addEventListener(‘drop’, handleDnDFileSelect, false); } else { alert(‘Sorry! this browser does not support HTML5 File APIs.’); } var files; function handleDragOver(event) { event.stopPropagation(); event.preventDefault(); var dropZone = document.getElementById(‘drop_zone’); dropZone.innerHTML = “Drop now”; } function handleDnDFileSelect(event) […]

在C#中的托盘中拖放NotifyIcon

我正在尝试创建一个在托盘中运行的C#应用​​程序,我可以将文件放在它的图标上。 有没有办法在System Tray图标上删除文件的路径? System.Windows.Forms.NotifyIcon没有任何与拖放相关的事件。