2010-09-03 75 views
0

我不太擅長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)一起工作所需的信息。

回答

0
MainForm hehe = new MainForm(); 
hehe.DOSOMETHING(); 

那麼,這是行不通的。它創建了一個新的表單,因爲沒有調用Show()而不可見。您需要在MainForm的代碼中引用現有表單。您可以通過調用它的構造函數將它傳遞給worker類,並傳遞該參考。

然而,這是一個壞主意。它使你的工作類依賴於用戶界面。改變GUI,經常會發生,因爲它很明顯會打破你的工人類。你通過使用事件來解決這個問題。當有事情發生時,讓工人階級提高事件。以便表單可以從類對象獲取信息並相應地更新UI。

也看看MVC模式來獲得一些想法。

+0

偉大的MVC模式,它被稱爲:)這最大限度地幫助我..我會繼續學習更多的信息呢? – botweb 2010-09-03 18:11:12

0

請記住,您的表單也是一類。使用標準的OOP機制允許一個類與另一個類交互。事件,屬性和方法都可以使用。