2016-03-05 34 views
1

我剛剛開始使用C#和一個Windows窗體應用程序。我對OOP也相當陌生。我試圖創建一個應用程序,用戶可以在其中修改某些設置,然後打開第二個窗體。我找到了一種方法,使用額外的「設置類」將用戶輸入數據從「設置表單」移動到主表單。但我不確定我是否以良好的方式做這件事,並正在尋求有關最佳實踐的建議。C#使用不同形式的類中的類

我對「主表」的代碼如下所示:

namespace Scheduler 
{ 
    public partial class FormScheduler : Form 
    { 

     public FormScheduler() 
     { 
      InitializeComponent(); 
     } 

     private PeriodSettings mPeriodSettings = new PeriodSettings(); 

     public string StartDate 
     { 
      get{ return mPeriodSettings.StartDate; } 

      set{ mPeriodSettings.StartDate = value; } 
     } 

     private void settingsSchPer_Click(object sender, EventArgs e) 
     { 
      FormSchemaPeriodSettings formSchPer = new FormSchemaPeriodSettings(); 
      formSchPer.formScheduler = this; 
      formSchPer.Show(); 
     } 

    } 
} 

而對於代碼「設置形成」看起來像:

namespace Scheduler 
{ 
    public partial class FormSchemaPeriodSettings : Form 
    { 

     public FormSchemaPeriodSettings() 
     { 
      InitializeComponent(); 
     } 

     public FormScheduler formScheduler = new FormScheduler(); 

     private void buttonCancel_Click(object sender, EventArgs e) 
     { 
      this.Close(); 
     } 

     private void buttonOK_Click(object sender, EventArgs e) 
     { 
      this.formScheduler.StartDate = this.startDate.Value.ToShortDateString(); 
      this.Close(); 
     } 
    } 
} 

例如,我必須定義properity爲SetDate在「主窗體」中,即部分

public string StartDate 
{ 
    get{ return mPeriodSettings.StartDate; } 

    set{ mPeriodSettings.StartDate = value; } 
} 

爲了能夠訪問類的StartDate的PeriodSettings或有沒有辦法能夠直接訪問已經定義的mPeriodSettings.StartDate?

我PeriodSettings類的樣子:

namespace Scheduler 
{ 
    class PeriodSettings 
    { 
     private string mStartDate; 
     private string mEndDate; 

     public PeriodSettings() 
     { 

     } 

     public string StartDate 
     { 
      get{ return mStartDate; } 

      set{ mStartDate = value; } 
     } 

     public string EndDate 
     { 
      get{ return mEndDate; } 

      set{ mEndDate = value; } 
     } 
    } 
} 

感謝任何意見!

+1

前段時間我回答[一個非常類似的問題(http://stackoverflow.com/問題/ 27658076/I-需要對接入一個外形控制從-另一級-C/27659346#27659346)。看看它。這個解決方案也可以派上用場。 – khlr

+1

我肯定會爲窗體創建自定義構造函數,我會通過這些設置類實例 –

+1

當您需要更改的唯一內容是在主窗體中創建的PeriodSettings實例的屬性時,無需傳遞整個窗體。而不是傳遞整個表單傳遞給PeriodSettings實例的引用。 – Steve

回答

1

你也可以打開設置表單作爲對話框,並用DialogResult屬性的工作,像這樣:

public partial class FormScheduler : Form 
{ 
    public FormScheduler() 
    { 
     InitializeComponent(); 
    } 

    public string StartDate 
    { 
     get { return mPeriodSettings.StartDate; } 
     set { mPeriodSettings.StartDate = value; } 
    } 

    private void settingsSchPer_Click(object sender, EventArgs e) 
    { 
     FormSchemaPeriodSettings formSchPer = new FormSchemaPeriodSettings(); 
     if (formSchPer.ShowDialog() == DialogResult.OK) 
      StartDate = formSchPer.ResultDate; 
    } 
} 

public partial class FormSchemaPeriodSettings : Form 
{ 
    public FormSchemaPeriodSettings() 
    { 
     InitializeComponent(); 
    } 

    public string ResultDate; 

    private void buttonCancel_Click(object sender, EventArgs e) 
    { 
     Close(); 
    } 

    private void buttonOK_Click(object sender, EventArgs e) 
    { 
     DialogResult = DialogResult.OK; 
     ResultDate = startDate.ValueToShortDateString(); 
     Close(); 
    } 
} 
+0

謝謝!目前我使用suggetions來將PeriodSettings實例傳遞給設置窗體,但是這種方法似乎也很實用,因爲我直接也能夠更新Main窗體,依賴於用戶在OK按下時選擇的設置。 – northmoose

相關問題