winform 拖拽的问题

问题描述

直接在属性添加事件没有问题,但像这样添加后,拖拽鼠标一放上去,就直接触发了DragDrop的事件了。不是等释放左键才触发。不知道是为什么。privatevoidtextBox1_DragEnter(objectsender,DragEventArgse){if(e.Data.GetDataPresent(DataFormats.FileDrop))e.Effect=DragDropEffects.Copy;elsee.Effect=DragDropEffects.None;}privatevoidtextBox1_DragDrop(objectsender,DragEventArgse){TextBoxtb=(TextBox)sender;tb.Text=((System.Array)e.Data.GetData(DataFormats.FileDrop)).GetValue(0).ToString();}privatevoidForm1_Load(objectsender,EventArgse){textBox1.AllowDrop=true;textBox1.DragEnter+=newDragEventHandler(textBox1_DragEnter);textBox1.DragOver+=newDragEventHandler(textBox1_DragDrop);}

后来我在DragDrop里面加了if(MouseButtons.Left!=Control.MouseButtons){TextBoxtb=(TextBox)sender;tb.Text=((System.Array)e.Data.GetData(DataFormats.FileDrop)).GetValue(0).ToString();}

在测试程序里虽然可以和正常的一样效果,但在主程序比较复杂的窗体里面没有效果。新人求指教。

解决方案

解决方案二:
把DataGridView中的数据拖曳到TreeView//窗体加载时,显示原有的数据privatevoidForm1_Load(objectsender,EventArgse){stringP_Connection=string.Format(//创建数据库连接字符串"Provider=Microsoft.Jet.OLEDB.4.0;DataSource=test.mdb;UserId=Admin");OleDbDataAdapterP_OLeDbDataAdapter=newOleDbDataAdapter("selectau_idas用户编号,au_lnameas用户名,phoneas联系电话fromauthors",P_Connection);DataSetds=newDataSet();P_OLeDbDataAdapter.Fill(ds,"UserInfo");dataGridView1.DataSource=ds.Tables["UserInfo"].DefaultView;TreeNodetreeNode=newTreeNode("用户信息",0,0);treeView1.Nodes.Add(treeNode);//默认情况下追加节点追加节点ToolStripMenuItem.Checked=true;}//DataGridView的按下鼠标事件privatevoiddataGridView1_MouseDown(objectsender,MouseEventArgse){if(dataGridView1.SelectedCells.Count!=0){//定义一个二维数组,数组中的每一行代表DataGridView中的一条记录recordInfo=newstring[dataGridView1.Rows.Count,dataGridView1.Columns.Count];//当按下鼠标左键时,首先获取选定行,记录每一行对应的信息for(inti=0;i<dataGridView1.Rows.Count;i++){if(dataGridView1.Rows[i].Selected){for(intj=0;j<dataGridView1.Columns.Count;j++){recordInfo[i,j]=dataGridView1.Rows[i].Cells[j].Value.ToString();}}}}}//当鼠标进入TreeView控件时,触发的操作privatevoidtreeView1_MouseEnter(objectsender,EventArgse){if(追加节点ToolStripMenuItem.Checked==true){#region代码区域if(recordInfo!=null&&recordInfo.Length!=0){//用双重for循环遍历数组recordInfo中的内容for(inti=0;i<recordInfo.GetLength(0);i++){for(intj=0;j<recordInfo.GetLength(1);j++){//判断数组中的值是否为空if(recordInfo[i,j]!=null){if(j==0){//向TreeView中加入节点TreeNodeNode1=newTreeNode(recordInfo[i,j].ToString());treeView1.SelectedNode.Nodes.Add(Node1);treeView1.SelectedNode=Node1;}else{//添加子级节点下的子节点TreeNodeNode2=newTreeNode(recordInfo[i,j].ToString());treeView1.SelectedNode.Nodes.Add(Node2);}}}treeView1.SelectedNode=treeView1.Nodes[0];treeView1.ExpandAll();}//清空recordInfo中的记录for(intm=0;m<recordInfo.GetLength(0);m++){for(intn=0;n<recordInfo.GetLength(1);n++){recordInfo[m,n]=null;}}}#endregion}if(清空内容ToolStripMenuItem.Checked==true){if(treeView1.SelectedNode.Nodes.Count!=0){treeView1.SelectedNode.Remove();TreeNodetreeNode=newTreeNode("用户信息",0,0);treeView1.Nodes.Add(treeNode);treeView1.SelectedNode=treeNode;#region代码区域if(recordInfo!=null&&recordInfo.Length!=0){//用双重for循环遍历数组recordInfo中的内容for(inti=0;i<recordInfo.GetLength(0);i++){for(intj=0;j<recordInfo.GetLength(1);j++){//判断数组中的值是否为空if(recordInfo[i,j]!=null){if(j==0){//向TreeView中加入节点TreeNodeNode1=newTreeNode(recordInfo[i,j].ToString());treeView1.SelectedNode.Nodes.Add(Node1);treeView1.SelectedNode=Node1;}else{//添加子级节点下的子节点TreeNodeNode2=newTreeNode(recordInfo[i,j].ToString());treeView1.SelectedNode.Nodes.Add(Node2);}}}treeView1.SelectedNode=treeView1.Nodes[0];treeView1.ExpandAll();}//清空recordInfo中的记录for(intm=0;m<recordInfo.GetLength(0);m++){for(intn=0;n<recordInfo.GetLength(1);n++){recordInfo[m,n]=null;}}}#endregion追加节点ToolStripMenuItem.Checked=true;清空内容ToolStripMenuItem.Checked=false;}}}

时间: 2024-12-31 00:33:44

winform 拖拽的问题的相关文章

桌面和winform权限不一样无法实现拖拽,怎么办?

问题描述 桌面和winform权限不一样无法实现拖拽,怎么办? [没有分了....] 做了个程序,打包安装,安装程序默认是管理员启动,安装完以后自动打开winform程序, 这时候winform程序也是管理员权限了,而资源管理器权限低,导致资源管理器的文件 无法拖拽至winform上!有没有人解决了这个问题! 自己的思路但是没有具体解决方案: 1.安装完后,自动打开的winform能不继承管理员权限吗? 2.能一次开两个exe一个是管理员权限一个是普通权限 解决方案 http://www.cod

C# winform 如何在Panel控件的拖拽DragDrop事件中获取Label对象

问题描述 C# winform 如何在Panel控件的拖拽DragDrop事件中获取Label对象 在C# winform中,在form窗体中有四个Panel控件(panel1.panel2.panel3.panel4)以及三个Label控件(label1.label2.label3). 目前需要将任意一个Label控件对象拖入任意一个Panel控件中.一旦松开鼠标,那么拖拽过程结束.此时应当处理Panel控件的DragDrop事件. 请问,在Panel控件的DragDrop事件中,如何获取La

panel-C# winform 如何在Panel控件的拖拽DragDrop事件中获取Label对象

问题描述 C# winform 如何在Panel控件的拖拽DragDrop事件中获取Label对象 在C# winform中,在form窗体中有四个Panel控件(panel1.panel2.panel3.panel4)以及三个Label控件(label1.label2.label3). 目前需要将任意一个Label控件对象拖入任意一个Panel控件中.一旦松开鼠标,那么拖拽过程结束.此时应当处理Panel控件的DragDrop事件. 请问,在Panel控件的DragDrop事件中,如何获取La

Extjs4实现两个GridPanel之间数据拖拽功能具体方法_javascript技巧

1.之前在winForm上有看过在选择数据时会将一些数据放在待选框中,而用户可以将想要选择的数据放到备选框中,那么如何用Extjs实现类似功能,我们选择用两个gridPanel来模拟其中的备选框和待选框.如下图所示: 定义代码如下: 复制代码 代码如下:          {               xtype:'gridpanel',               multiSelect: true,                id:'staff',                 x:

WPF Label 拖拽布局问题

问题描述 我在UniformGrid内动态生成了N个label,并给背景图片,如果做到拖拽任意Label可以改变其位置,最好改变之后可以把其他的排序,类似win8系统的图标拖拽前台<Windowx:Class="WpfWin8Demo.MainWindow"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft

360安全浏览器如何超级拖拽

  拖拽链接.图片或者选中的文字等在页面上其他地方放开(即超级拖拽),即可在新标签中打开对应的链接.图片或搜索选中的文字.熟练使用超级拖拽功能可以大大改善您的浏览体验,提高您的浏览速度.

360极速浏览器的超级拖拽

拖拽链接.图片或者选中的文字等在页面上其他地方放开(即超级拖拽),即可在新标签中打开对应的链接.图片或搜索选中的文字.熟练使用超级拖拽功能可以大大改善您的浏览体验,提高您的浏览速度.

draggabilly一款功能强大的拖动拖拽元素插件

draggabilly一款功能强大的拖动拖拽元素插件:http://download.csdn.net/detail/cometwo/9411895 支持移动触摸设备的纯js元素拖放插件 :http://download.csdn.net/detail/cometwo/9411907 :"` <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" con

360安全浏览器6.0超级拖拽设置

  拖拽链接.图片或者选中的文字等在页面上其他地方放开(即超级拖拽),即可在新标签中打开对应的链接.图片或搜索选中的文字.熟练使用超级拖拽功能可以大大改善您的浏览体验,提高您的浏览速度.