两个用户控件之间的拖放

时间:2012-12-23 23:08:09

标签: c# winforms user-controls drag-and-drop

我有

1)用户控制UC(由单选按钮和文本框组成)

2)包含多个UC类型控件的表单

我想在这些UC控件之间启用拖放(例如 - 将一个控件拖到另一个控件上会将源控件的组成TextBox控件中的文本添加到目标控件的组成TextBox控件中)

到目前为止我做了什么:

1)我设置了UC,它的组成控制AllowDrop = True

2)在容器形式中我编写了用于UC控制MouseDown,DragEnter和DragDrop事件的方法

结果:

只有当我使用不包含组成控件的UC部分进行拖放时才拖动拖放工作 - 也就是说,如果我在UC组成的TextBox控件上按下鼠标按钮,UC MouseDown不会被触发(如果我按下鼠标按钮)在UC上,但不是它的组成TextBox或RadioButton控件,然后UC MouseDown事件被触发)

我需要什么:

无论是否在成分控制上按下(释放)鼠标按钮,我都需要拖放工作

1 个答案:

答案 0 :(得分:0)

我需要做的是:

1)在用户控件中 - 创建一个事件委托(MouseEventHandler,而不是EventHandler)

    public event MouseEventHandler eventName; //this one is accessible from container form

2)在用户控制中 - 为组件控件的MouseDown事件编写一个方法,该方法将组件控件的事件连接到公开的事件

    private void method_MouseDown(object sender, MouseEventArgs e) //attached to constituent control's MouseDown event
    {
            if (this.eventName!= null) this.eventName(this, e);
    }

3)以容器形式,为组件控件公开事件(eventName)编写一个方法

4)使用User Control的DragDrop和DragEnter事件(不需要使用组成控制各自的事件)

5)Constituent控件的AllowDrop属性应该为False,否则在组成控件上移动鼠标指针会触发User Control的DragLeave事件