0

我有

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 事件)

我需要的:

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

4

1 回答 1

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

5) 子控件的 AllowDrop 属性应为 False,否则在子控件上移动鼠标指针会触发用户控件的 DragLeave 事件

于 2012-12-24T01:04:12.247 回答