我有
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事件被触发)
我需要什么:
无论是否在成分控制上按下(释放)鼠标按钮,我都需要拖放工作
答案 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事件