2011-02-05 10 views
0

我無法訪問我的兩個變量。我在網上看了一下,發現我需要用form.dlg.selectedpath這樣的東西來調用它,但我得到了三個錯誤。一個說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) 

歌廳一個變量,第二個變量是從這裏引用。

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 -of-MSDN,但是,仍然着-GET-我的程序到工作與-IT) – 2011-02-05 18:27:26

回答

5

字段不應該直接暴露;

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

然後從你的表單實例訪問:而不是在窗體上添加屬性

string path = myFormInstance.FolderPath; 

而且 - 確保dlg佈置有形式;在協議親自我不會把它作爲一個字段在所有 - 我有我的創建,使用和釋放對話框小塊分配強場:

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-變量)。這是對的,但不是公開的,而是提供一個訪問類的成員的屬性。如果您嘗試從另一個類訪問成員(我嘗試執行此操作),則會發生此問題。

public FolderBrowserDialog Dlg{ 
    get{return dlg;} 
} 

更好的是,這是像Marc Gravell發佈的解決方案,不提供對話框,但提供了它的選定值。

相關問題