在两个用户控件之间拖放

本文关键字:用户 控件 之间 拖放 两个 | 更新日期: 2023-09-27 17:49:17

我有

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

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

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

到目前为止我做了什么:

1)我已经设置了UC和它的组成控件AllowDrop = True

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

结果:

拖放只有在我使用不包含成分控件的UC部分进行拖放时才有效-也就是说,如果我在UC成分文本框控件上按下鼠标按钮,UC MouseDown不会被触发(如果我在UC上按下鼠标按钮,但不在它的成分文本框或RadioButton控件上,那么UC MouseDown事件被触发)

我需要什么:

无论鼠标按钮是否按下(释放)组成控件,我都需要拖放工作

在两个用户控件之间拖放

我需要做的是:

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)使用用户控件的DragDrop和DragEnter事件(不需要使用组件控件各自的事件)

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