C# winform 控件拖动问题

来源:百度知道 编辑:UC知道 时间:2024/06/05 04:49:48
我想模拟一个简单的操作系统桌面,就是在一个全屏的窗体上实现自定义图标控件的拖动效果

我自定义的图标控件用的是透明背景加的图片显示,可以用图标拖动

当全屏窗体上没有背景图片事拖动很正常
可是窗体上加个背景图片后拖动时仿佛重绘太慢似的总是有闪动

请问怎么解决?

各位高手请指教!!!

说明你实现的控件有些问题 如果窗体有背景的时候 他会先重绘背景 然后在上面绘制控件 如果你拖动频繁的话 那么绘制也很频繁 尤其是你说的是全屏绘制 你要知道图形操作是非常昂贵的

我建议你不要操作控件拖动 而是做一个里面可以包含很多可以拖动项的控件 并且自己处理绘制方法(而不是响应绘制事件)

自己定义图标控件的拖动时,画图的效率很成问题。
可以有一个简单的方法来实现在背景图片上进行图标拖动的效果,那就是使用ListView控件。
先添加一个ImageList控件,把它的Images属性设成几个图标。
然后添加一个ListView控件,把它的BackgroundImage属性设成背景图片;把LargeImageList设成刚才添加的ImageList控件;把View属性设成LargeIcon;
把AllowDrop设成True;把AutoArrange设成False;然后在它的Items属性中添加几项,把各项的Text值和ImageIndex值(小于ImageList中的图片数)设成不同的值。这样就有点象电脑桌面了。
最后添加拖放事件处理程序就行了:
ItemDrag事件
private void listView1_ItemDrag(object sender, ItemDragEventArgs e)
{
DoDragDrop(e.Item, DragDropEffects.Move);// 开始拖放
}

DragEnter事件
private void listView1_DragEnter(object sender, DragEventArgs e)
{
e.Effect = e.AllowedEffect;// 允许在ListView上拖放
}

DragDrop事件
private void listView1_DragDrop(object sender, DragEventArgs e)