2009-05-11 16 views
0

私は3つのフォームを持つC#で簡単なウィンドウアプリケーションを持っています。 最初のフォームはメインフォーム(その名前はFrmMain)、2番目はFrmData、3番目はFrmShowです。 メインフォーム(FrmMain)で、私は二番目の形式(FrmData)からインスタンスを作成して、それを示しています。作成者オブジェクトへのアクセス

public partial class FrmMain : Form 
    { 
     public Form FrmModifyData; //for FrmData 
     int PersonCode; 
     public FrmMain() 
     { 
      InitializeComponent(); 
     } 

     private void btnShowDataForm_Click(object sender, EventArgs e) 
     { 
      FrmModifyData= new FrmData(); 
      FrmModifyData.ShowDialog(); 

     } 
    } 

が、私はPersonCodeようFrmMainフィールドにFrmModifyDataからアクセスすることはできません。 クリエイターオブジェクトのフィールドにアクセスするにはどうすればよいですか?

注:私は初心者です。

ありがとうございました。

答えて

3

FrmMainクラスのインスタンスを取得するには、FrmModifyDataクラスにプロパティを追加する必要があります。その後FrmModifyDataの内側にあなたがFrmMainのパブリックメンバーへのアクセスを持っているでしょう

FrmModifyData = new FrmData(); 
FrmModifyData.ParentData = this; 
FrmModifyData.ShowDialog(); 

:次に、あなたがこれを行うことができます。明らかに、これはすばやく汚れていて再利用性のないものなので、FrmModifyDataに明示的なプロパティを追加することをお勧めします。

+1

は、私が実際に、これを行うには、いくつかのデザインパターンがあると思います。親参照はおそらく子コンストラクタのパラメータであり、次のように呼び出すべきです: "new FrmData(this);" – Philippe

+0

があるかもしれませんが、カプセル化の面では、より良いルート、IMOは、コントロールが必要とするデータのみを提供することです。コントロールは、親フレーム内のすべてのパブリックフィールド/メソッドにアクセスする必要はありません。子フレームが親フレームのメソッドを実行する必要がある場合、それらはおそらくカスタムイベント内にあるはずです。 –

0

PersonCodeフィールドにアクセスする場合は、それをpublicとして宣言する必要があります。可視性変更子はそれを非公開にするので、他のキャスからはアクセスできません。

0

私はこのようなものにします。 このようにして、FrmModifyDataを他の形式で使用することができます。

は、私はそれが古いポストだけど、はい、あなたはそれを読みました:)

public partial class FrmMain : Form 
{ 
    // public Form FrmModifyData; <-- do not declare it in your FrmMain 
    // (is't a modal dialog, so you won't get more instances) 

    public int PersonCode {get; set;} 

    public FrmMain() 
    { 
     InitializeComponent(); 
    } 

    private void btnShowDataForm_Click(object sender, EventArgs e) 
    { 
     FrmData FrmModifyData = new FrmData(); 
     FrmModifyData.PersonCode = this.PersonCode; 
     DialogResult result = FrmModifyData.ShowDialog(); 
     if(result == DialogResult.Ok) 
     { 
      // do something with the result 
      this.PersonCode = FrmModifyData.PersonCode; 


     } 

    } 
} 
関連する問題