派生方法的 C# 设计器错误

Posted

技术标签:

【中文标题】派生方法的 C# 设计器错误【英文标题】:C# Designer error for derive method 【发布时间】:2018-03-02 14:10:58 【问题描述】:

当我在 Visual Studio 中为我的表单打开设计器时遇到问题

方法“dragScreen_MouseDown”不能是事件的方法,因为该类派生自的类已经定义了该方法。

我唯一改变的是添加一个名为FormBase 的新类并将该类中的方法获取到其他形式。工作正常,但设计师似乎不喜欢它。

所以在FormBase.cs 我得到了这个方法:

protected void dragScreen_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e)

    if (e.Button == MouseButtons.Left)
    
        ReleaseCapture();
        SendMessage(Handle, WM_NCLBUTTONDOWN, HT_CAPTION, 0);
    

然后在Main.cs继承表单FormBase。

在设计器中是这样的:

this.button6.MouseDown += new System.Windows.Forms.MouseEventHandler(this.dragScreen_MouseDown);

【问题讨论】:

请出示代码 我不知道要显示什么,因为方法本身不是问题。只是似乎不喜欢它的设计师。我在这里发现了类似的问题,但没有用:***.com/questions/3165269/… 所以你添加了一个像class FormBase : Form1这样的新类? 用'new'关键字声明方法,或重命名方法。 The method 'xxx' cannot be the method for an event because a class this class derives from already defines the method的可能重复 【参考方案1】:

我认为您的问题是您从类BaseForm 派生了部分MainForm,而该类是从类System.Windows.Forms.Form 派生的。这意味着设计器生成的代码我从类System.Windows.Forms.Form 派生,但你在类中的一部分是BaseForm。您需要将设计器代码从public partial class MainForm : Form 更改为public partial class MainForm : BaseForm

我说的对吗?

【讨论】:

已经是这样了。该应用程序运行良好,没有错误。只是我的 MainForm 中的设计器显示了错误。 我认为你不应该使用 BaseForm,因为 Visual Studio 不喜欢这样。【参考方案2】:

我能够解决问题。由于我在 Main.Designer.cs 中有 dragScreen 导致第一个冲突,它不喜欢在类外寻找方法。所以我不得不删除这些行并添加到 Main.cs 构造函数中:

panel4.MouseDown += dragScreen_MouseDown;

【讨论】:

以上是关于派生方法的 C# 设计器错误的主要内容,如果未能解决你的问题,请参考以下文章

C#程序在VS编译器加载时出现找不到方法,无法显示该程序窗体设计器

C#编程:加载设计器报错

C#用DesignSurface实现一个简单的窗体设计器

我在使用C#进行编C/S程序的时候,设计器模式不能进入

c# 设计器无法加载问题

C# WinForm窗体设计器怎么显示网格