"缺少声明的部分修饰符..另一个相同类型的部分声明已经存在"。我是初学者,只是按照书本上的指导。

19

我是一名初学者,正在按照书本中的练习编写代码。以下是我的代码并出现了如下错误:

"Missing partial modifier on declaration of type 'Windowsform.Form1'; another partial declaration of this type exists"

我该怎么办? 我的代码如下:

using System;
using System.Windows.Forms;

namespace Windowsform
{
    public class Form1 : Form
    {
       private TextBox txtEnter;
       private Label lblDisplay;
       private Button btnOk;

       public Form1()

       {
           this.txtEnter = new TextBox();
           this.lblDisplay = new Label();
           this.btnOk = new Button();
           this.Text = "My Hellowin app!";


           //txtEnter
           this.txtEnter.Location = new System.Drawing.Point(16, 32);
           this.txtEnter.Size = new System.Drawing.Size(264, 20);

           //lblDisplay
           this.lblDisplay.Location = new System.Drawing.Point(16, 72);
           this.lblDisplay.Size = new System.Drawing.Size(264, 128);

           //btnOK
           this.btnOk.Location = new System.Drawing.Point(88, 224);
           this.btnOk.Text = "OK";
           this.btnOk.Click +=
               new System.EventHandler(this.btnOK_Click); 

           //MyForm
           this.Controls.AddRange(new Control[] {
                            this.txtEnter, this.lblDisplay, this.btnOk});

       }

       static void Main()
       {
           Application.Run(new Form1());
       }

       private void btnOK_Click(object sender, System.EventArgs e)
       {
           lblDisplay.Text = txtEnter.Text + "\n" + lblDisplay.Text;
       }
    }
}
6个回答

39

你在其他地方声明了一个同名的类 (Form1),并且在那里使用了 partial 修饰符。

如果你将这个类拆分成两个不同的文件(例如,一个文件用于 UI 布局,另一个文件用于逻辑),则只需在声明中添加 partial 修饰符:

public partial class Form1
{
}

1
@user1742237,我猜你已经修改了默认生成的Program类以包含Form1声明,但通常WinForms应用程序的模板包括一个生成的空白Form1类。只需将其删除即可。 - Adriano Repetti
1
我不得不滚动到这么远才能找到一个真正简单明了、以代码为导向的答案?在 StackOverflow 上?... - Don Cheadle

6
当你创建一个新表单时,实际上是在两个不同的地方创建。其中一个地方声明类名并实现所有的管道工作,而你粘贴在这里写所有功能的文件。为了使这成为可能,C#有一个partial class特性,如果在程序集的某个地方定义了带有partial修饰符的类,则可以定义多个该类的声明,只要它带有该修饰符。
更多信息请参见MSDN

2
在我的情况下,当我使用asp.net的Web表单应用程序时,出现了这个错误,原因是在我的global.asax标记中,我将CodeBehind属性替换为CodeFile。将其改回来就可以解决问题了。

1

万一有人像我一样不小心遇到这个问题……我一直在使用Visual Studio 2013 for Web和Visual Studio 2015 RC之间切换来尝试我的MVC解决方案。

如果你试图在2015 RC中打开一个MVC4解决方案,它会自动执行一些操作,可能会导致下次在2013 for Web中打开同一解决方案时出现此错误。

最终我回滚到先前的SVN版本,并仅使用2013 for Web,我的代码就像多年来一样构建得很好。我知道这不是正确的修复方法,但这就是导致我的实例中突然出现这个问题的原因。


我也遇到了同样的问题,频繁在VS 2015和VS 2019之间切换会导致这种情况发生。 - AKS

1

TL;DR:由于VS2013重命名类的遗留问题,但是VS2013没有正确地在所有地方进行重命名,导致旧名称的实例挂在未公开的位置。

详细信息:我在VS2013中遇到了完全相同的错误,在我的情况下,最初我添加了一个新类“Employee”,但后来意识到它应该是AddEmployee,所以我右键单击并更改了名称,它“似乎”在所有正确的位置进行了更改。
相当长一段时间后,我尝试添加一个Employee类,然后出现了错误。在访问此处并找不到修复方法后,我搜索了“整个解决方案”的其他Employee实例,并且发现了之前将Employee重命名为AddEmployee时出现了几个失败的实例:

AddEmployee.aspx.cs:    public partial class Employee : System.Web.UI.Page
AddEmployee.aspx.designer.cs:    public partial class Employee {

将这两个更新为AddEmployee,错误消失了,并且编译和运行正常。


0

我可能完全错了,但是我在使用MVC3和EF4时遇到了同样的错误(以及更多)。在头痛了一天左右后,我最终决定升级到MVC4,并忍受那个学习曲线,如果MVC3不合作的话。有趣的是,所有的错误都消失了。

在升级之前,我必须进行了100次搜索,试图找到我的重复声明。

看起来MVC4和EF4更好地协作。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接