2009-07-04 12 views
0

これは私のMDI親です。C# - アプリケーションからMDI親を取得する可能性がありますか?

public partial class frmMain : Form 
     { 
      public Options options {get; set;} 
      public Project project {get; set;} 


      public frmMain() 
      { 
       InitializeComponent(); 


      } 
     } 

以下のMy MDIの子は、プロジェクトとオプションにアクセスする必要があります。

public partial class frmInput : form 
    { 

     public frmInput(frmMain parent) 
     { 
      InitializeComponent(); 

      this.MdiParent = parent; 

      //Of course I can do this 
      Options options = ((frmMain) this.MdiParent).options; 

      //But if I can have something as following, I can have 
      //a static method to access options in the frmMain anywhere. 
      frmMain mainform = Application.MainForm; 
      Options options = mainform.options; 

     } 
    } 

アプリケーションがMdiParentへのアクセスを提供しない場合は、他の方法で静的メソッドでアクセスできますか?

答えて

2

どうして静的フィールドを手動で作成していないのですか?ような何か:

public class frmMain { 
    public static frmMain ApplicationMainWindow {get; private set;} 
    public frmMain() { 
     ApplicationMainWindow = this; 
     InitializeComponent(); 
    } 
} 
その Application.OpenFormsリターン以外

アプリケーションのすべての開いているフォームとあなたはfrmMainインスタンスを見つけるために、それを調べることができます。しかしそれは理想的なソリューションではありません。

+0

ありがとうございます – kemdo

0

これは正常に動作します:

public partial class frmInput : form 
    { 
     private frmMain mainFrame; 
     public frmInput(frmMain parent) 
     { 
      mainFrame = parent; 
      InitializeComponent(); 

      this.MdiParent = parent; 

      //Of course I can do this 
      Options options = mainFrame.options; 

     } 
     private void Something() { 
      Options o = mainFrame.options; //can access options now. 
     } 
    } 

はしかし、これらのクラスをdecompleに適用することができ、よりオブジェクト指向のアプローチは多分あります。

関連する問題