Dev*_*Bob 9 c# xml inheritance app-config winforms
我正在开发基于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
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
然后我有我的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>
Run Code Online (Sandbox Code Playgroud)
现在,在我所有表格的声明中,我都有这条线
public partial class Form1 : FormBase
Run Code Online (Sandbox Code Playgroud)
我的问题是,当我运行应用程序它运行正常,它的工作原理,App.Config文件中的不同颜色是我的表单上显示的颜色.但是当我在没有运行应用程序的情况下在Visual Studio中查看设计器时,设计器无法显示表单的外观,我收到以下错误
Service.Windows.Forms.Design.IEventHandlerService服务已存在于服务容器中.参数名称:serviceType
我不知道如何解决这个问题.这不是一个大问题,因为应用程序运行正常,但这困扰我,我想知道发生了什么
Van*_*cio 14
我自己也遇到了这个问题.根据另一个网页,可以通过关闭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
Run Code Online (Sandbox Code Playgroud)