首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >错误:服务System.Windows.Forms.Design.IEventHandlerService已经存在于服务容器中

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

Stack Overflow用户
提问于 2014-07-18 09:35:04
回答 5查看 13.6K关注 0票数 14

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

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

代码语言:javascript
运行
复制
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文件,其中包含如下代码:

代码语言:javascript
运行
复制
<?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>

现在,在我所有表格的声明中

代码语言:javascript
运行
复制
public partial class Form1 : FormBase

我的问题是,当我运行这个应用程序时,它运行得很好,而且工作正常,App.Config文件中的不同颜色就是显示在我的表单上的颜色。但是,当我只查看Visual中的设计器而不运行该应用程序时,设计器无法显示表单的外观,因此我得到以下错误

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

我不知道怎么解决这个问题。这不是什么大问题,因为这个应用程序运行正常,但这让我很困扰,我想知道发生了什么

EN

回答 5

Stack Overflow用户

发布于 2014-12-21 17:55:55

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

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

他们说也要删除bin文件夹,但我发现我不必这么做。希望这能有所帮助!

票数 24
EN

Stack Overflow用户

发布于 2016-05-09 16:05:06

虽然我仍然想更好地了解到底出了什么问题,但这对我起了作用。我正在Visual中创建继承的窗体。显然,Visual设计器在显示窗体之前调用Load函数。父窗口中的load函数正在被调用并访问窗体上的一个控件,这是抛出一个对象引用而不是设置为对象实例(为什么?)。

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

代码语言:javascript
运行
复制
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    If (DesignMode) Then Exit Sub
票数 4
EN

Stack Overflow用户

发布于 2015-01-19 06:53:08

我也遇到了这个问题。我试过了上面的解决方案,但对我没有用。我的结构是:

公共Form1 :表格 公共Form2 : Form1 公共Form3 : Form2

我尝试重新构建和删除obj/bin文件夹,但是无法使此错误消失。最后,作为正常检查,我将Form3更改为从Windows类继承:

代码语言:javascript
运行
复制
System.Windows.Forms.Form

然后,我在设计器中重新打开了Form3,它出现了(正如我所预期的)。然后,我将Form3改为从Form2继承,并在设计器中重新打开Form3。而且起作用了。

#随机-错误-修复-胜利

祝好运!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24821737

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档