来自其他类和其他主要问题的控制表
问题描述:
我不太擅长OOP甚至C#,但我想尽量保持我的代码尽可能干净。 可以说,我们已经有了类似的东西命名空间“GoogleCalendarNotificator”内:来自其他类和其他主要问题的控制表
public partial class MainForm : Form
{
private object calendarData;
public MainForm()
{
InitializeComponent();
}
private void recieveCalendarDataButton_Click(object sender, EventArgs e)
{
getCalendarDataBW.RunWorkerAsync();
}
private void getCalendarDataBW_DoWork(object sender, DoWorkEventArgs e)
{
try {
getCalendarData getCalendarDataObj = new getCalendarData();
calendarData = getCalendarDataObj.getData();
} catch (Exception err) {
statusHandler("Login Failed, Please check your Data", err.Message);
}
try {
workWithCalendarData workWithCalendarDataObj = new workWithCalendarData();
workWithCalendarDataObj.workWithData(calendarData, MainForm.ActiveForm);
statusHandler("New calendardata recieved");
} catch (Exception err) {
statusHandler("Login Failed, Please check your Data", err.Message);
}
}
public void statusHandler(string displayMessage, string tooltipMessage = null)
{
string curTime = DateTime.Now.Hour.ToString() + ":" + DateTime.Now.Minute.ToString();
statusLabel.Text = curTime + " - " + displayMessage;
if (tooltipMessage != null)
{
statusLabel.ToolTipText = "Original error message: " + tooltipMessage;
}
}
这是对ErrorHandling中好的解决办法? 以及如何对这个部分:
workWithCalendarData workWithCalendarDataObj = new workWithCalendarData();
workWithCalendarDataObj.workWithData(calendarData, MainForm.ActiveForm);
我只是想给另一个类(workWithCalendarData)与MainForm的互动的可能性。但我不想简单地写在workWithCalendarData类是这样的:
MainForm hehe = new MainForm();
hehe.DOSOMETHING();
我希望它是动态地,如果有人知道我的意思。就像给这个类提供与Form(a.e. MainForm.ActiveForm)一起工作所需的信息。
答
MainForm hehe = new MainForm();
hehe.DOSOMETHING();
那么,这是行不通的。它创建了一个新的表单,因为没有调用Show()而不可见。您需要在MainForm的代码中引用现有表单此。您可以通过调用它的构造函数将它传递给worker类,并传递该参考。
然而,这是一个坏主意。它使你的工作类依赖于用户界面。改变GUI,经常会发生,因为它很明显会打破你的工人类。你通过使用事件来解决这个问题。当有事情发生时,让工人阶级提高事件。以便表单可以从类对象获取信息并相应地更新UI。
也看看MVC模式来获得一些想法。
答
请记住,您的表单也是一类。使用标准的OOP机制允许一个类与另一个类交互。事件,属性和方法都可以使用。
伟大的MVC模式,它被称为:)这最大限度地帮助我..我会继续学习更多的信息呢? – botweb 2010-09-03 18:11:12