在VS2012 C#项目中剪切和粘贴WinForms控件时是否保留事件处理程序分配?

在VS2012 C#项目中剪切和粘贴WinForms控件时是否保留事件处理程序分配?,c#,.net,event-handling,visual-studio-2012,C#,.net,Event Handling,Visual Studio 2012,在VS2012设计器中剪切和粘贴控件时,是否有办法维护事件处理程序分配?例如,我有一个图形控件,它有一个加载事件,事件存根中有代码。如果剪切并粘贴graph控件,则Load事件在Properties Editor中不再显示为具有事件处理程序分配。我必须使用Load事件旁边的下拉框为Load事件重新选择现有的事件处理程序代码(重做分配)。有没有一种方法可以在不丢失事件处理程序分配的情况下剪切和粘贴控件 在Delphi中,我可以自由剪切和粘贴控件,事件处理程序分配是剪贴板文本的一部分,因此当控件粘贴

在VS2012设计器中剪切和粘贴控件时,是否有办法维护事件处理程序分配?例如,我有一个图形控件,它有一个加载事件,事件存根中有代码。如果剪切并粘贴graph控件,则Load事件在Properties Editor中不再显示为具有事件处理程序分配。我必须使用Load事件旁边的下拉框为Load事件重新选择现有的事件处理程序代码(重做分配)。有没有一种方法可以在不丢失事件处理程序分配的情况下剪切和粘贴控件


在Delphi中,我可以自由剪切和粘贴控件,事件处理程序分配是剪贴板文本的一部分,因此当控件粘贴到窗体或框架上时,它们会被保留。我希望Visual Studio 2012和C#项目也能有同样的方法。

使用Visual Studio designer剪切或复制控件时,只复制控件的属性。这是故意的,在我看来是合理的。如果您在哪里复制控件以及在哪里分配或复制所有相同的事件处理程序,大多数情况下都是违反直觉的


听起来控件仍保持相同的形式。在这种情况下,拖动和放置控件就足够了。

重新分配事件的一种方法如下:

  • 双击粘贴的控件,将创建一个名称如下的事件:

    button1_Click_1(...)
    
  • 现在将函数名更改为原始名称
    按钮1\u单击
    ,IDE将显示一条关于函数重复的警告,单击“确定”,然后删除已创建的函数


您需要使用文档大纲

View > Other Windows > Document Outline
并找到所需的控件,然后将其拖放到目标容器。
在这种情况下,您不会错过任何活动。

这个问题有些奇怪。您只需剪切+粘贴即可将其移动到完全不同的形式。只有在极少数情况下才会有适当的事件处理程序。听起来你只是用错了,拖动控件。@HansPassant-一个常见的使用案例是当我决定将几个大控件移动到一个选项卡(pages)控件的不同选项卡上时。我发现必须重置Dock属性设置并尝试正确地拖放所有内容很尴尬。至少对我来说,将选项卡式控件放到表单上,然后将所需的控件剪切并粘贴到不同的页面(选项卡)上要容易得多。如果VS不能以这种方式工作,那么我就明白了,但我希望有一种方法可以实现我想要的。另一个用例是,当您想要将一些控件从WinForm移动到新的UserControl(在重构期间)时。如果您只剪切和粘贴它,那么您必须再次创建事件处理程序(并复制它的代码…)。它包含几个子控件,其中许多都附加了事件处理程序。后来我决定在我的表格底部放一个StatusStrip。你猜怎么着,你不能将它设置为停靠在表单底部。SplitContainer将继续使用填充状态条(虽然表面上停靠在底部),但实际上会隐藏SplitContainer的某些部分。唯一的方法是剪切SplitContainer,然后将其粘贴回去。