来自其他类和其他主要问题的控制表

问题描述:

我不太擅长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模式来获得一些想法。

+0

伟大的MVC模式,它被称为:)这最大限度地帮助我..我会继续学习更多的信息呢? – botweb 2010-09-03 18:11:12

请记住,您的表单也是一类。使用标准的OOP机制允许一个类与另一个类交互。事件,属性和方法都可以使用。