【发布时间】:2012-08-26 03:57:30
【问题描述】:
我有 2 个类:MyForm 和 Database
在 MyForm 中,我有一种方法可以更改标签文本以显示错误:
public void printError(string text){
label1.Text = text;
}
我的数据库类也需要访问该方法,所以我将其设为静态:
public static void printError(MyForm form, string text){
form.label1.Text = text;
}
现在的问题是,如何从数据库类调用该方法?
This question我发现说我需要像这样将MyForm传递给数据库的构造函数:
class MyForm : Form{
Database db;
public Form(){
db = new Database(this);
}
}
class Database{
MyForm form;
public Database(MyForm f){
form = f;
}
...
//then I can access the printError like this
MyForm.printError(form, "You got error");
}
我试过了,它冻结了表单。还有其他解决方案吗?
谢谢
【问题讨论】:
-
你真的需要重新考虑你的设计。您的数据库需要访问您的 UI 的可能原因是什么?有很多方法可以报告不涉及糟糕设计的错误。考虑改为抛出异常。
-
从设计的角度来看,这非常糟糕。
Database类应该不了解您的 UI。相反,Database的方法应该将任何错误返回给调用者,然后调用者可以处理如何显示它们。 -
我需要访问 UI 标签来打印“错误的用户名”之类的错误。目前我使用的 MessageBox 非常具有侵入性。编辑:那么我应该将错误消息作为
return并在 MyForm 中处理它吗? -
在标签中显示错误并没有错,我们只是说
Database类不是放置显示代码的正确位置。 -
如果你想要我遵循的方法,我可以给你一个例子。或者如果你坚持遵循同样的方法,这取决于你