C# 拖放groupbox项目

C# 拖放groupbox项目,c#,winforms,groupbox,C#,Winforms,Groupbox,我正在使用C#处理一个Windows窗体项目,其中我使用groupbox作为容器,并向其中添加项目(标签,图片框…)。我想知道是否可以在此控件上实现拖放事件以使用鼠标移动项目,或者是否必须在添加到我的groupBox的控件中实现此事件 在对我的主题进行了一些研究之后,我在一位朋友的帮助下找到了解决方案。为了完成这个任务,我们需要使用一些变量、属性和三个鼠标事件来分配给对象:MouseMove、MouseUp和MouseDown。我最近还发现了一个示例:此代码用于将控件(这里我们为Button完成

我正在使用C#处理一个Windows窗体项目,其中我使用
groupbox
作为容器,并向其中添加项目(
标签
图片框
…)。我想知道是否可以在此控件上实现拖放事件以使用鼠标移动项目,或者是否必须在添加到我的
groupBox
的控件中实现此事件

在对我的主题进行了一些研究之后,我在一位朋友的帮助下找到了解决方案。为了完成这个任务,我们需要使用一些变量、属性和三个鼠标事件来分配给对象:MouseMove、MouseUp和MouseDown。我最近还发现了一个示例:

此代码用于将控件(这里我们为Button完成了操作。您可以通过在DragDrop事件中将Button类更改为任何其他类来使用任何控件)复制到groupbox

首先,将Groupbox的“AllowDrop”属性设置为true

groupBox5.AllowDrop=true;
从属性窗口为Groupbox创建“DragEnter”事件

private void groupBox5_DragEnter(object sender, DragEventArgs e)
{
    e.Effect = DragDropEffects.Move;
}
private void groupBox5_DragDrop(object sender, DragEventArgs e)
{
     Control c = e.Data.GetData(e.Data.GetFormats()[0]) as Control;
     // Declare rnd globally for creating random id for dynamic button(eg : Random rnd = new Random();)
     Button btn = new Button();
     btn.Name = "Button" + rnd.Next(); 
     btn.Size = c.Size;            
     btn.Click += new System.EventHandler(DynamicButton_Click);
     if (c != null)
     {                
         btn.Text = c.Text;
         btn.Location = this.groupBox5.PointToClient(new Point(e.X, e.Y));
         this.groupBox5.Controls.Add(btn);
     }
}
接下来,从属性窗口为Groupbox创建一个“DragDrop”事件

private void groupBox5_DragEnter(object sender, DragEventArgs e)
{
    e.Effect = DragDropEffects.Move;
}
private void groupBox5_DragDrop(object sender, DragEventArgs e)
{
     Control c = e.Data.GetData(e.Data.GetFormats()[0]) as Control;
     // Declare rnd globally for creating random id for dynamic button(eg : Random rnd = new Random();)
     Button btn = new Button();
     btn.Name = "Button" + rnd.Next(); 
     btn.Size = c.Size;            
     btn.Click += new System.EventHandler(DynamicButton_Click);
     if (c != null)
     {                
         btn.Text = c.Text;
         btn.Location = this.groupBox5.PointToClient(new Point(e.X, e.Y));
         this.groupBox5.Controls.Add(btn);
     }
}

检查本教程Hi Sam1,感谢提供代码示例。我的情况有点不同。我的控件已经在groupbox中了。@brunoviske你能添加一些代码吗?你想做什么?到目前为止,我只是尝试了@Sam1 code sample。。。我只是不知道这个事件在groupbox控件中是如何工作的。嗨,伙计们,在对我的主题进行了一些研究之后,我在一个朋友的帮助下找到了解决方案。为了完成这个任务,我们需要使用一些变量、属性和三个鼠标事件来分配给对象:MouseMove、MouseUp和MouseDown。我最近还发现了一个例子: