错误:服务System.Windows.Forms.Design.IEventHandlerService已经存在于服务

本文关键字:服务 存在 于服务 IEventHandlerService System Windows Forms Design 错误 | 更新日期: 2023-09-27 18:13:32

我正在开发一个基于Windows表单模板的Windows应用程序。我使用的是。net 3.5版本。在这个应用程序中,目标是所有不同表单的视觉设置都可以从app . config文件中进行管理(背景色,不同按钮的背景色等)。

基本上,我有一个FormBase类,我所有的表单都继承它,这个类包含如下代码:

public class FormBase : Form
{
    protected override void OnLoad(EventArgs e)
    {
        BackColor = Color.FromName(ConfigurationManager.AppSettings["backColor"]);
        foreach (var item in this.Controls)
        {
            if (item is Button)
            {
                ((Button)item).BackColor = Color.FromName(ConfigurationManager.AppSettings["buttonBackground"]);
                ((Button)item).ForeColor = Color.FromName(ConfigurationManager.AppSettings["buttonText"]);
            }
            if (item is ...)
            {
                //some other code
            }
        }
    }
}
然后是我的App.Config文件它包含如下代码:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <appSettings>
    <add key="buttonText" value="White"/>
    <add key="buttonBackground" value="Red"/>
    <add key="backColor" value="White"/>
    <add key="textColor" value="Red"/>
  </appSettings>
</configuration>

现在,在所有表单的声明中都有

这一行
public partial class Form1 : FormBase

我的问题是,当我运行应用程序,它运行良好,它的工作,在app . config文件中的不同颜色是我的表单上显示的颜色。但是当我在Visual Studio中查看设计器而不运行应用程序时,设计器无法显示表单的样子,我得到以下错误

service System.Windows.Forms.Design.IEventHandlerService已经存在于服务容器中。参数名称:serviceType

我不知道如何解决这个问题。这不是一个大问题,因为应用程序运行良好,但这困扰着我,我想知道发生了什么

错误:服务System.Windows.Forms.Design.IEventHandlerService已经存在于服务

我自己刚刚遇到这个问题。根据另一个网页,这个错误可以通过关闭visual studio并删除您的obj文件夹来修复,然后重新打开visual studio并重新构建项目。

这是我读的那一页。http://www.csharp411.com/ieventhandlerservice-already-exists-in-the-service-container/

他们说要删除bin文件夹,但我发现我不必这样做。希望这对你有帮助!

这对我来说很有效,尽管我仍然想更好地了解出了什么问题。我在Visual Studio中创建了一个继承表单。显然,Visual Studio设计器会在显示表单之前调用Load函数。父窗口中的load函数正在被调用并访问窗体上的控件,这抛出了一个未设置为对象实例的对象引用(为什么?)

我的解决方案是在父窗体加载函数的开头添加以下代码行。我正在使用VB,但它是类似的c#。

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    If (DesignMode) Then Exit Sub

我清理并重建了我的解决方案以摆脱这种情况。

还检查您是否使用扩展类的形式,也使用KeyEventMouseEventWindows.Forms,确保您调用Windows.Forms.KeyEventArgsWindows.Forms.MouseEventArgs这个参数。

检查某些事件是否会在特定表单的开始或结束时调用,一旦您确定了该事件,只需通过以下语句。希望它对你有用。

If (DesignMode) Then Exit Sub

我也遇到了这个问题。我尝试了上面的解决方案,但对我不起作用。我的结构是这样的:

public Form1: Form

public Form2: Form1

public Form3: Form2

我尝试重建和删除obj/bin文件夹,但无法得到这个错误消失。最后,作为完整性检查,我将Form3更改为继承Windows Form类:

System.Windows.Forms.Form

然后我在设计器中重新打开Form3,它出现了(如我所料)。然后,我将Form3更改为继承Form2,并在设计器中重新打开Form3。

# random-bug-fix-win

祝你好运!