我很少有自己制作活动的经验。我目前正在使用表单和控件来处理事件,所以我试图坚持使用 WinForm 处理事件的方式。
WinForm 控件已经有自己的事件。由于事件是使用某种委托类型进行的,因此我必须在用于处理事件期间发生的事情的方法中匹配委托签名。据我所知,这意味着我必须在我的事件处理程序中接收两个参数:一个 sourceObject
和一个EventArgs
.
我试图弄清楚如何通过DragDrop
相关事件在控件之间传递各种信息。我已经能够在网上找到针对不同情况的各种代码片段,但我想更好地了解这些信息是如何实际传递的。
特别是当涉及到DragDrop
事件时,我的信息似乎将通过DataObject
. 反过来,它作为参数传递给DragDrop.DoDragDrop
方法。
这是我的理解开始减少的地方。在我见过的大多数示例中,似乎指定了某种数据格式。数据格式本身是字符串类型。通常数据格式与数据一起传递到DataObject
.
这种数据格式是做什么的?它只是显示所涉及数据的类型吗?我已经看到了测试数据格式的示例,并且根据数据格式的不同进行了各种操作。你不能只做一个 typeof(YourData) 来检查类型吗?我不明白数据格式有什么用。
http://msdn.microsoft.com/en-us/library/ms741842.aspx
在上面的链接中,第一个示例显示DataObject
正在创建一个没有指定数据格式的。它解释了数据格式是自动选择的,并且您的对象是默认转换的。
您可以将任何对象传递给DataObject
? 那么当DragDrop
目标控件上发生事件时,该控件是否可以访问传递的对象的方法和字段?或者对象会被转换成其他形式DataObject
吗?各种结构怎么样?
我还做了一些从 Windows 资源管理器图标拖放到我的表单的操作。我能够使用我找到的一些示例代码获取图标的文件路径。它还使用了一种数据格式。
if (e.Data.GetDataPresent(DataFormats.FileDrop))
{
e.Effect = DragDropEffects.Copy;
}
摘要:
我试图了解数据是如何通过 WinForm 事件传递的。我不明白我在各种DragDrop
示例中看到的一些内容。我知道数据以某种方式以各种格式存储,并且有一种方法可以提取这些数据。我不明白数据格式的用途。我不明白究竟可以通过DataObject
. 总的来说,我的理解EventArgs
相当缺乏。
随意评论我在这里提到的任何内容。如果我说错了什么,请指出。感谢任何能帮助我更好地理解这个主题的东西。
编辑: 我决定解释我打算去哪里。也许有人可以使用我正在尝试做的事情来解释我所问的一些问题。
我有一个包含某种类型控件的表单。我正在尝试使控件的放置高度可定制和动态。每当用户将另一个控件添加到表单中时,每个控件都会自动重新定位以保持有序。
我目前正在尝试允许用户在表单周围拖动一个控件以重新定位它。无论用户决定在何处放下控件,所有其他控件都将移开,为移动控件腾出空间。
如果我能够正确地移动被拖动的控件和窗体上的所有其他控件,我需要能够从被拖动的控件中获取某些信息。需要通过事件传递的主要数据将采用使用System.Drawing.Point
结构的 Location 属性的形式。