我正在开发一个基于 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 中查看设计器而不运行应用程序时,设计器无法显示表单的外观,并且出现以下错误
服务容器中已存在 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 函数。父窗口中的加载函数被调用并访问表单上的控件,这抛出了一个未设置为对象实例的对象引用(为什么?)。
我的解决方案是在父表单加载函数的开头添加以下代码行。我使用的是 VB,但 C# 的情况类似。
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
If (DesignMode) Then Exit Sub
我清理并重建了我的解决方案以摆脱这种情况。
还要检查您是否使用了 Form 的扩展类,并且还使用了
KeyEvent
中的 MouseEvent
或 Windows.Forms
,确保您通过 Windows.Forms.KeyEventArgs
或 Windows.Forms.MouseEventArgs
调用此参数。
检查某个事件是否会在特定表单的打开或关闭时调用,一旦确定该事件,只需执行以下语句即可。希望它对你有用。
If (DesignMode) Then Exit Sub
我也刚刚遇到这个问题。我尝试了上述解决方案,但它对我不起作用。我的结构是这样的:
公共表格1:表格
公开表格2 : 表格1
公开表格3 : 表格2
我尝试重建和删除 obj/bin 文件夹,但无法消除此错误。最后,作为健全性检查,我将 Form3 更改为从 Windows Form 类继承:
System.Windows.Forms.Form
然后我在设计器中重新打开Form3,它就出现了(如我所料)。然后我将 Form3 改回继承自 Form2 并在设计器中重新打开 Form3。它起作用了。
#随机错误修复-胜利
祝你好运!
如果你像我一样使用很多固定类,(.net<5) then simply closing that tab and reopening that tab might fix your problem.