中古系统中,有一个“保存布局”页面,用VB.NET做;设计的技术有:按钮的拖拽复制,动态生成表格,动态生成按钮,布局的保存主要是这些,大家是不是觉的很简单!昨天对自己这段时间的学习进行了回顾,又重新整理了一下代码。当我写这篇博客的时候突然感觉,这些真的挺简单啊! 但实际我做的时候,但远远不止这些。
通过做这一块内容,我深深的感觉到自己知识积累的匮乏,学习没有章法,尽管很简单的问题,而自己仍然是处处碰壁。自身的这些问题,还有很多,在努力改正中。
现在和大家分享一下,“拖拽复制功能”的实现,如有问题,请指正。
这里涉及到三个事件:
MouseDown事件:当鼠标指针在组件上方并按下鼠标按钮时发生。
DragDrop事件:拖放操作完成时发生
DragEnter事件:拖动首次进入某控件(Panel1)边界时就开始触发该事件。
具体代码如下(代码只摘录有拖拽复制部分。):
'按下按钮时的产生的效果
Private Sub Button1_MouseDown(sender As System.Object, e As System.Windows.Forms.MouseEventArgs) Handles Button1.MouseDown
'左键的话,标志位为true(表示拖拽开始)
If (e.Button = Windows.Forms.MouseButtons.Left) Then
Button1.DoDragDrop(Button1, DragDropEffects.Copy Or DragDropEffects.Move) '形成拖拽效果,移动+拷贝的组合效果
End If
End Sub
'当Button被拖拽到WinForm上时候,鼠标效果出现
Private Sub Form2_DragEnter(sender As Object, e As DragEventArgs) Handles Button1.DragEnter, GroupBox1.DragEnter, Panel1.DragEnter, MyBase.DragEnter
If (e.Data.GetDataPresent(GetType(Button))) Then
e.Effect = DragDropEffects.Copy
End If
End Sub
'拖拽释放后,在矩形框动态生成按钮
Private Sub Panel1_DragDrop(sender As Object, e As DragEventArgs) Handles Panel1.DragDrop
'计算鼠标在panel中的相对位置
Dim p As Point = New Point(0, 0)
p.X = e.X - CType(sender, Panel).Left - 4
p.Y = e.Y - CType(sender, Panel).Top - 15
'拖放完毕之后,自动生成新按钮
Dim btn = New Button
Panel1.Controls.Add(btn)
'btn.Tag = rs.Name.Substring(5, 2) '从第6个字符起,取两个字符,“shape01”取出“01”
btn.Size = New Size(rs.Size.Width + 1, rs.Size.Height + 1)
btn.Location = rs.Location
btn.BackgroundImage = Button1.BackgroundImage
End Sub
效果图:
当时搜集资料,写代码的时候,各种乱,当我静下心来写这篇博客的时候,才知道这个功能只用了三个事件就ok. 我想这就是总结或是颗粒归藏的功效吧。