2011-02-05 17 views
0

私は2つの変数にアクセスするのに問題があります。私はインターネットを見て、それを呼び出すのにform.dlg.selectedpathのようなものを使う必要があることを知ったが、私は3つのエラーが出る。 1つは、form.dlgがアクセス不能であると言う場合、次はオブジェクト参照が必要であると言います。私も別のものにアクセスしようとしています。それは、フォームにdlg2の定義が含まれていないと言います。form.csファイルからprogram.csファイルに変数を呼び出す方法

これは私がで変数をするコードである。

var di = new DirectoryInfo(Form1.dlg.SelectedPath); 
      di.CopyTo(Form1.dlg2.SelectedPath, true); 

これは私が

public partial class Form1 : Form  
    { 
     FolderBrowserDialog dlg = new FolderBrowserDialog(); 


     public Form1() 
     { 
      InitializeComponent(); 

     } 

     private void Form1_Load(object sender, EventArgs e) 
     { 

      if (dlg.ShowDialog() == DialogResult.OK) 

から一つの変数をgeting午前二変数は、ここから参照されている私のコードです。

private void button1_Click(object sender, EventArgs e) 
     { 
      FolderBrowserDialog dlg2 = new FolderBrowserDialog(); 
      if (dlg2.ShowDialog() == DialogResult.OK) 
      //do whatever with dlg.SelectedPath 
      { 
       backgroundWorker1.RunWorkerAsync(dlg2.SelectedPath); 
      } 
     } 

助けてください。

+0

[私はこのMSDNコードを持っていますが、それでも私のプログラムを使用することはできません。](http://stackoverflow.com/questions/4900756/i-have-got-this-code -msdn-but-still-cant-get-my-program-to-work-with-it) –

答えて

5

フィールドは実際に直接的に公開されるべきではありません。代わりに、フォームのプロパティを追加します。

public string FolderPath { 
    get { return dlg.SelectedPath; } 
} 

は、次にフォームのインスタンスからアクセスします。

string path = myFormInstance.FolderPath; 

をも - dlgがフォームに配置されていることを確認してください。協定に個人的に私はすべてのフィールドとしてそれを維持wouldntの - 私は私が作成した小さなブロックに割り当てる強い分野を持っているだろう、ダイアログを使用し、処分:

public string FolderPath { get; private set; } 

private void SelectPath() { 
    using(var dlg = new FolderBrowserDialog()) { // or whatever type 
     if(dlg.ShowDialog() == DialogResult.OK) { 
      FolderPath = dlg.SelectedPath; 
     } 
    } 
} 
1
var di = new DirectoryInfo(Form1.dlg.SelectedPath);  
di.CopyTo(Form1.dlg2.SelectedPath, true); 

問題上記のコードでは、フォームインスタンスのメンバ変数にクラスメンバであるかのようにアクセスしようとしています。

あなたはForm1.dlg.SelectedPathと書いていますが、Form1はクラスの名前であり、おそらくインスタンスではありません。

コンパイル時に、保護レベルのためにメンバーにアクセスできないというエラーが表示される可能性があります。これはあなたのメンバーが公表されていないためです(dlg -variable)。これは正しいですが、公開する代わりに、クラスのメンバーにアクセスするためのプロパティを提供してください。この問題は、別のクラスのメンバにアクセスしようとすると発生します(これを実行しようとするとthinKです)。

public FolderBrowserDialog Dlg{ 
    get{return dlg;} 
} 

しかし、これはMarc Gravellのような解決策であり、ダイアログは提供せず、選択した値です。

関連する問題