gpt4 book ai didi

c# - Visual Studio 不断创建已定义的事件处理程序

转载 作者:太空宇宙 更新时间:2023-11-03 19:23:28 27 4
gpt4 key购买 nike

我有一个在多个部分类文件中定义的 Windows 窗体。在其中一个文件 (xxx.Query.cs) 中,我为 DataGridView 定义了所有事件处理程序。但是,有时,Visual Studio 决定要在窗体 (xxx.cs) 的主文件中为其中四个事件处理程序创建 stub 。我最终得到了四个错误,这些错误类似于“Type 'xxx' already defines a member called 'dataGridView1_ColumnHeaderMouseClick' with the same parameter types”。

如何让 Visual Studio 停止尝试为这些创建 stub ?这是最令人烦恼的。

最佳答案

我今天在将一个大型(遗留)表单拆分为一个部分类并向其添加新部分后遇到了这个问题。尽管这是一个老问题,但我发布了原始问题的许多答案都是不正确的。具体来说,他们中的许多人声称 Visual Studio 无法在不双击的情况下生成这些。我想确认 VS 确实在某些情况下会这样做。

在我的特殊情况下,我向选项卡控件添加了一个新选项卡,并将新选项卡事件和代码放在新类中。最初,我将此代码(包括事件)放在主窗体的末尾,这可能与问题有关。移动代码后,如果我将控件添加到主窗体的任何部分(例如,一个单独的选项卡),VS 会为我在新的部分类中拥有的 3 个事件生成空事件处理程序,尽管在这个中有完整的事件处理程序类(class)。

我目前唯一的解决方案是在出现问题时从我的主窗体代码底部删除空处理程序。解决方案清理不会删除这些空白处理程序。

因为所有 3 个每次都一致地生成,并且因为当我添加测试控件时它们位于隐藏在主窗体后面的选项卡上(所以没有机会双击,当然没有机会双击所有 3),我可以自信地说这是一个 Visual Studio 错误(在我的例子中是 VS 2013)。

24/9/15 更新:在厌倦了删除处理程序之后,我进行了更多搜索,并找到了解决该问题的方法。这是来自 MS 论坛 (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) 的 mustiy 解决方案的文本。这个修复对我有用,虽然点击创建事件仍然在错误的类中创建它们,但是在移动它们之后,它们可以正常工作。它还可以防止创建无效的事件处理程序。

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.

关于c# - Visual Studio 不断创建已定义的事件处理程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10452423/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com