1

我的意图是编写一个 LabelOrText UserControl,其行为类似于 Label 或 TextField - 取决于其构造函数中的模式参数。UserControl 有一个 Text 属性,它包含一个 Label 和一个 TextField - 但一次只能看到两者中的一个。因此,在任何应用程序源中,我现在可以用我的 LabelOrText UserControl 替换所有标签和所有 TextFields,而无需更改任何源代码......(当然,不仅 Text 属性被委托给可见的内部控件,Font 属性和BackColor 属性和所有其他属性都委托给可见的内部控件...)

这工作正常,除了 DragOver 和 DragDrop 事件不能正常工作。

--> LabelOrText1.DragDrop += myDDHandler 应该像 Label1.DragDrop += myDDHandler 一样工作

--> LabelOrText1.DragOver += myDOHandler 应该像 Label1.DragOver += myDOHandler 一样工作

--> 使用鼠标在内部 Label 上的任何 DragOver 动作都应该调用 myDOHandler(o, e)

--> 使用鼠标在内部 Label 上的任何 DragDrop 操作都应该调用 myDDHandler(o, e)


所以在任何应用程序的源代码中用我的 LabelOrText UserControl 替换标签控件非常简单。


任何关于如何通过 UserControl 透明地从内部控件路由拖动事件的想法都将受到高度赞赏!

4

1 回答 1

1

单独的文本框听起来不错,但如果你想在父容器中处理拖放,只需将标签、文本和自身的 DragDrop 事件设置为父/自身;

您可以通过连接父类中的事件来透明地做到这一点,这应该很容易。

在父对象 CTOR 或其他地方

//psuedocode
label.DragDrop += parentEvent;  //aggregate object
text.DragDrop += parentEvent;
DragDrop += parentEvent;

我用一个面板来做这个,这样任何被推动和拖动的东西都会导致整个东西跟随你的手指/鼠标并滚动。平移。

于 2012-12-13T04:40:22.790 回答