我今天在将大型(旧版)表单拆分为部分类同时添加新部分后遇到了这个问题。尽管这是一个老问题,但我发布的许多原始问题的答案都是不正确的。具体来说,他们中的许多人声称 Visual Studio 无法在不双击的情况下生成这些。我想确认 VS在某些情况下确实这样做了。
在我的特殊情况下,我向选项卡控件添加了一个新选项卡,并将新选项卡事件和代码放在新类中。最初,我将这段代码(包括事件)放在主窗体的末尾,这可能与问题有关。移动代码后,如果我将控件添加到主窗体的任何部分(例如,单独的选项卡),VS 会为我在新部分类中的 3 个事件生成空事件处理程序,尽管在此有完整的事件处理程序班级。
我现在唯一的解决方案是在出现问题时从我的主表单代码底部删除空处理程序。解决方案清理不会删除这些空白处理程序。
由于所有 3 个每次都一致生成,并且由于它们位于一个选项卡上,当我添加测试控件时它们隐藏在主窗体后面(所以没有机会双击,当然没有机会双击所有 3 个),我可以说相信这是一个 Visual Studio 错误(在我的例子中是 VS 2013)。
24/9/15 更新:在厌倦了删除处理程序后,我进行了更多搜索,并找到了解决该问题的方法。这是来自 MS 论坛的 Mustiy 解决方案的文本(https://social.msdn.microsoft.com/Forums/windows/en-US/79910eaa-84e7-472d-95ee-4b8ddfbf99f0/multiple-partial-class-files-cause -problems-with-forms-designer?forum=winforms&prof=required)。这个修复对我有用,虽然单击创建事件仍然会在错误的类中创建它们,但是在移动它们之后,它们可以正常工作。它还可以防止创建无效的事件处理程序。
i had same problem and came accross your post, but i wasn't sattisfied. It had to be a solution for this because VS IDE does it.
Here is the solution :
Open the .csproj project file with notepad and let's say for a Form1.cs file you will see a configuration like
<Compile Include="Form1.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="Form1.Designer.cs">
<DependentUpon>Form1.cs</DependentUpon>
</Compile>
If you create a new file called Form1Events.cs and put another partial class of Form1 and move the events to the new partial class. In the new .csproj file you the new file like this below
<Compile Include="Form1Events.cs">
<SubType>Form</SubType>
</Compile>
Something is missing you have to tell the VS IDE that this Form1Events.cs file is dependent to Form1.cs. As the IDE do this for Form1.Designer.cs file make the same with Form1Events.cs and put a "DependentUpon" tag into Form1Events.cs. Last the .csproj file look like this below
<Compile Include="Form1.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="Form1.Designer.cs">
<DependentUpon>Form1.cs</DependentUpon>
</Compile>
<Compile Include="Form1Events.cs">
<DependentUpon>Form1.cs</DependentUpon>
<SubType>Form</SubType>
</Compile>
And if you save the .csproj file the IDE reloads the project and on the Solution exlorer tree you see that the new partial class is put below Form1.cs file. And if you open the designer and double click a previous decalred and moved event it will navigate to the new file.