我在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();
如果有人知道我的意思,我希望它是动态的。就像向课堂提供使用表格所需的信息(a.e. MainForm.ActiveForm)。
答案 0 :(得分:0)
MainForm hehe = new MainForm();
hehe.DOSOMETHING();
嗯,那是行不通的。它会创建一个 new 表单,由于未调用Show()而无法看到该表单。您需要在MainForm代码中引用现有表单 this 。您可以通过调用其构造函数将其传递给worker类,并传递引用。
然而,这是一个坏主意。它使您的worker类依赖于用户界面。更改GUI通常是因为它是如此可见,会破坏您的工人类。您可以通过使用事件来解决该问题。当有价值的事情发生时,让工人阶级举起活动。这样表单就可以从类对象中获取信息并相应地更新UI。
另请参阅MVC模式以获得一些想法。
答案 1 :(得分:0)
请记住,您的表单也是一个类。使用标准OOP机制允许一个类与另一个类进行交互。可以使用事件,属性和方法。