放在容器panel1中的 treeView1 拖动图像的没效果.

问题描述

靠近左边正常靠近中间,拖动图像逐渐偏离靠右边看不见拖动图像了这个估计是panel1的坐标跟主窗口坐标冲突吧?下面是代码:看看有什么问题privatevoidtreeView_ItemDrag(objectsender,System.Windows.Forms.ItemDragEventArgse){//Getdragnodeandselectitthis.dragNode=(TreeNode)e.Item;this.treeView1.SelectedNode=this.dragNode;//Resetimagelistusedfordragimagethis.imageListDrag.Images.Clear();this.imageListDrag.ImageSize=newSize(this.dragNode.Bounds.Size.Width+this.treeView1.Indent,this.dragNode.Bounds.Height);//Createnewbitmap//ThisbitmapwillcontainthetreenodeimagetobedraggedBitmapbmp=newBitmap(this.dragNode.Bounds.Width+this.treeView1.Indent,this.dragNode.Bounds.Height);//GetgraphicsfrombitmapGraphicsgfx=Graphics.FromImage(bmp);//Drawnodeiconintothebitmapgfx.DrawImage(this.imageListTreeView.Images[0],0,0);//Drawnodelabelintobitmapgfx.DrawString(this.dragNode.Text,this.treeView1.Font,newSolidBrush(this.treeView1.ForeColor),(float)this.treeView1.Indent,1.0f);//Addbitmaptoimagelistthis.imageListDrag.Images.Add(bmp);//GetmousepositioninclientcoordinatesPointp=this.treeView1.PointToClient(Control.MousePosition);//Computedeltabetweenmousepositionandnodeboundsintdx=p.X+this.treeView1.Indent-this.dragNode.Bounds.Left;intdy=p.Y-this.dragNode.Bounds.Top;//Begindraggingimageif(DragHelper.ImageList_BeginDrag(this.imageListDrag.Handle,0,dx,dy)){//Begindraggingthis.treeView1.DoDragDrop(bmp,DragDropEffects.Move);//EnddraggingimageDragHelper.ImageList_EndDrag();}}privatevoidtreeView1_DragDrop(objectsender,System.Windows.Forms.DragEventArgse){//UnlockupdatesDragHelper.ImageList_DragLeave(this.treeView1.Handle);//GetdropnodeTreeNodedropNode=this.treeView1.GetNodeAt(this.treeView1.PointToClient(newPoint(e.X,e.Y)));//Ifdropnodeisn'tequaltodragnode,adddragnodeaschildofdropnodeif(this.dragNode!=dropNode){//Removedragnodefromparentif(this.dragNode.Parent==null){this.treeView1.Nodes.Remove(this.dragNode);}else{this.dragNode.Parent.Nodes.Remove(this.dragNode);}//AdddragnodetodropnodedropNode.Nodes.Add(this.dragNode);dropNode.ExpandAll();//Setdragnodetonullthis.dragNode=null;//Disablescrolltimerthis.timer.Enabled=false;}}privatevoidtreeView1_DragEnter(objectsender,System.Windows.Forms.DragEventArgse){DragHelper.ImageList_DragEnter(this.treeView1.Handle,e.X-this.treeView1.Left,e.Y-this.treeView1.Top);//Enabletimerforscrollingdraggeditemthis.timer.Enabled=true;}privatevoidtreeView1_DragLeave(objectsender,System.EventArgse){DragHelper.ImageList_DragLeave(this.treeView1.Handle);//Disabletimerforscrollingdraggeditemthis.timer.Enabled=false;}privatevoidtreeView1_DragOver(objectsender,System.Windows.Forms.DragEventArgse){//ComputedragpositionandmoveimagePointformP=this.PointToClient(newPoint(e.X,e.Y));DragHelper.ImageList_DragMove(formP.X-this.treeView1.Left,formP.Y-this.treeView1.Top);//GetactualdropnodeTreeNodedropNode=this.treeView1.GetNodeAt(this.treeView1.PointToClient(newPoint(e.X,e.Y)));if(dropNode==null){e.Effect=DragDropEffects.None;return;}e.Effect=DragDropEffects.Move;//ifmouseisonanewnodeselectitif(this.tempDropNode!=dropNode){DragHelper.ImageList_DragShowNolock(false);this.treeView1.SelectedNode=dropNode;DragHelper.ImageList_DragShowNolock(true);tempDropNode=dropNode;}//AvoidthatdropnodeischildofdragnodeTreeNodetmpNode=dropNode;while(tmpNode.Parent!=null){if(tmpNode.Parent==this.dragNode)e.Effect=DragDropEffects.None;tmpNode=tmpNode.Parent;}}privatevoidtreeView1_GiveFeedback(objectsender,System.Windows.Forms.GiveFeedbackEventArgse){if(e.Effect==DragDropEffects.Move){//Showpointercursorwhiledragginge.UseDefaultCursors=false;this.treeView1.Cursor=Cursors.Default;}elsee.UseDefaultCursors=true;}publicclassDragHelper{[DllImport("comctl32.dll")]publicstaticexternboolInitCommonControls();[DllImport("comctl32.dll",CharSet=CharSet.Auto)]publicstaticexternboolImageList_BeginDrag(IntPtrhimlTrack,intiTrack,intdxHotspot,intdyHotspot);[DllImport("comctl32.dll",CharSet=CharSet.Auto)]publicstaticexternboolImageList_DragMove(intx,inty);[DllImport("comctl32.dll",CharSet=CharSet.Auto)]publicstaticexternvoidImageList_EndDrag();[DllImport("comctl32.dll",CharSet=CharSet.Auto)]publicstaticexternboolImageList_DragEnter(IntPtrhwndLock,intx,inty);[DllImport("comctl32.dll",CharSet=CharSet.Auto)]publicstaticexternboolImageList_DragLeave(IntPtrhwndLock);[DllImport("comctl32.dll",CharSet=CharSet.Auto)]publicstaticexternboolImageList_DragShowNolock(boolfShow);staticDragHelper(){InitCommonControls();}}

解决方案

本帖最后由 u014325761 于 2014-07-17 02:33:40 编辑
解决方案二:
// Add bitmap to imagelist            this.imageListDrag.Images.Add(bmp);                         // Get mouse position in client coordinates            Point p = this.treeView1.PointToClient(Control.MousePosition);             // Compute delta between mouse position and node bounds            int dx = p.X + this.treeView1.Indent - this.dragNode.Bounds.Left;            int dy = p.Y - this.dragNode.Bounds.Top;应该是list控件大小的问题你再放大点看看,坐标的位置X取得小一些
解决方案三:
不行啊,treeView1只要不放在panel1,任意大小,任意位置都有拖动效果
解决方案四:
我想问题出在这里DragHelper.ImageList_BeginDrag(this.imageListDrag.Handle,0,dx,dy)BOOLWINAPIImageList_BeginDrag(HIMAGELISThimlTrack,intiTrack,intdxHotspot,intdyHotspot);

dxHotspotanddyHotspot[in]Specifiesthelocationofthedragpositionrelativetotheupper-leftcorneroftheimage.//dx,dy是相对于父窗口的坐标,放在容器里他就把容器当作父做口了,容器位置改变是,图像就发生偏移了.但是这个坐标这么转换呢?

时间: 2024-10-29 04:10:26

放在容器panel1中的 treeView1 拖动图像的没效果.的相关文章

ASP.NET2.0中实现图像转换过滤效果

asp.net|转换 本文描述一种创建定制Web控件的容易方法,并把该控件使用于一个ASP.NET 2.0 web页面中显示微软DirectX图像转换过滤效果. 一.简介 本文描述一种创建定制web控件并应用于一个ASP.NET 2.0 web页面中显示微软DirectX图像转换过滤效果的容易的方法.文中包括一个拥有11个不同控件的类库,每一个控件分别展示微软DirectX图像转换过滤效果的某些方面.在这11个控件中,5个是页面过渡效果控件,其它的6个是用于增强文本外观的过滤效果控件. 在这6个

ASP.NET 2.0中实现图像转换过滤效果

本文描述一种创建定制Web控件的容易方法,并把该控件使用于一个ASP.NET 2.0 web页面中显示微软DirectX图像转换过滤效果. 一.简介 本文描述一种创建定制web控件并应用于一个ASP.NET 2.0 web页面中显示微 软DirectX图像转换过滤效果的容易的方法.文中包括一个拥有11个不同控件的 类库,每一个控件分别展示微软DirectX图像转换过滤效果的某些方面.在这11 个控件中,5个是页面过渡效果控件,其它的6个是用于增强文本外观的过滤效 果控件. 在这6个用于增强文本外

日历-两个js代码放在一个页面中冲突

问题描述 两个js代码放在一个页面中冲突 <script> $.fn.smartFloat = function() { var position = function(element) { var top = element.position().top, pos = element.css("position"); $(window).scroll(function() { var scrolls = $(this).scrollTop(); if (scrolls &

特效:在网页中显示可拖动的月历

可拖动|特效|网页|显示      使用本文提供的javascript脚本,配合Dreamweaver的层和行为的运用,可以在页面中显示可拖动的精美月历. 具体制作步骤如下: 1.启动Dreamweaver MX,新建一个HTML文档,切换到代码视图,编写javascript脚本. (1)在HTML文档的< head>...< /head>插入下面的javascript脚本: < SCRIPT LANGUAGE="javascript" TYPE=&quo

在Fireworks中实现复杂的图像交互

交互 图像交互技术在网页制作当中被广泛的应用于按钮效果和图像展示当中.即当鼠标指向网页中的某一图像时,会触发另一图像的显示.下面就让我们来看一下具体的操作过程. 效果预览 点击这里在新窗口中预览. 启动FW后可新建一个如网页般大小的画布.然后用绘图工具随意画上三个矩形按钮,并在按钮上输入相关的文字内容.当然,你也可以使用各类工具绘制出更加美观的按钮.在此我在三个按钮上分别输入"手机"."摄像机"和"随身听"的字样.然后把每个按钮的对象及文字选中后

.net中PictureBox中图片的拖动

  .net中PictureBox中图片的拖动首先在Form窗体上放一个PictureBox,并指定一个图片显示 定义一系列变量处理图片拖动 '处理图片拖动        Private m_Leftx As Integer         Private m_Lefty As Integer         Dim m_MousePosX As Integer        Dim m_MousePosY As Integer        Dim m_DriftX As Integer   

从系统中取得指定资源图像

在Winuser.h中定义了一些系统常用的资源,比如对话框的图标,某些按钮上的图像等. 以下是部分OEM资源序号和一些标准ICON的ID: //---------------------------------------------------------------------------// OEM Resource Ordinal Numbers#define OBM_OLD_CLOSE  32767#define OBM_SIZE 32766#define OBM_OLD_UPARRO

CSS样式和JavaScript脚本是应该放在外部文件中呢?

  CSS样式和JavaScript脚本是应该放在外部文件中呢? 还是把它们放在页面本身之内呢? 如何处理是关于一些性能规则的思维,52CSS.com就这些问题,作一些探讨. 在实际应用中使用外部文件可以提高页面速度,因为CSS样式和JavaScript脚本文件都能在客户端产生缓存.内置在HTML文档中的CSS样式和JavaScript脚本则会在每次请求中随HTML文档重新下载.这虽然减少了HTTP请求的次数,却增加了HTML文档的大小.从另一方面来说,如果外部文件中的CSS样式和JavaScr

在WPS2013中裁切插入的图像的方法

  金山WPS因为功能强大而且操作简单而被越来越多的电脑用户喜欢.今天小编就给大家分享一个金山WPS非常好用的图片裁剪功能.我们知道如果要实现图片的裁剪,常常需要一些图片处理软件才可以实现,不过,现在,只要您的电脑里安装的是金山WPS2013,就可以直接在WPS2013实现图片裁切了.下面来看具体教程吧! 在WPS2013中裁切插入的图像的方法: 打开WPS2013中PPT软件; 插入需要裁剪的照片; 选中图片点击裁剪; 图片周围开始弹出黑色边框; 利用鼠标裁剪图片,上下,左右均可裁剪;