2016-11-15 63 views
2

我用C#創建了一個簡單的表單,只有幾個按鈕和文本框。用戶將輸入各種詳細信息,例如項目描述和代碼編號,輸出文件位置等。在類之間訪問列表數組

最終用戶將啓用瀏覽按鈕以允許他/她選擇報告所在的輸入目錄。

瀏覽按鈕使用FolderBrowserDialog並檢查結果。如果結果是OK,那麼我使用locationArray = Directory.GetFiles(fbd.SelectedPath,「* .txt」)創建了一個包含所有文件路徑的數組。

該類被定義爲public void。

我的計劃是在完成按鈕中添加一些腳本,然後通過數組,提取文件名,讀取每個文件的內容並生成具有各種細節的報告。

我遇到的問題是我似乎無法訪問另一個類中的數組(完成按鈕)。

我在類之前定義了數組 - string [] locationArray;

然後與I類填充文件路徑陣列按如下:

locationArray = Directory.GetFiles(fbd.SelectedPath,的 「* .txt」);

在這個階段,我知道數組正在被填充,因爲我已經顯示了數組的長度。

有人可以建議如何訪問不同類下的數組,所以我可以通過它循環訪問請。

在此先感謝。

更具體地講我的代碼看起來是這樣的:

string[] locationArray; 

    public void button1_Click_1(object sender, EventArgs e) 
    { 
     FolderBrowserDialog fbd = new FolderBrowserDialog(); 

     fbd.Description = "Browse Directory"; 

     if (fbd.ShowDialog() == System.Windows.Forms.DialogResult.OK) 
     { 
      locationArray = Directory.GetFiles(fbd.SelectedPath, "*.txt");    
     } 
     FinishButton.Enabled = true; 
    } 

試圖訪問locationArray在這裏:

private void button1_Click(object sender, EventArgs e) 
    { 

     string sProjectName = ProjectName.Text; 
     string sProjectNumber = ProjectNumber.Text; 
     string sOutputDirectory = OutputDirectory.Text; 

     const string message1 = "Done!"; 
     const string caption1 = "Completed"; 
     var result = MessageBox.Show(message1, caption1, 
            MessageBoxButtons.OK, 
            MessageBoxIcon.Information); 

     if (result == DialogResult.OK) 
      Environment.Exit(0); 
    } 

希望這是更清晰。

Tom

+4

請不要發表您的代碼的描述。只需發佈相關的代碼片段即可。 –

+0

這裏有很多關於在表單之間傳遞數據的答案。做一些更多的搜索,不要將自己限制在列表或數組中,並查看是否找不到合適的答案。 –

+0

命名空間Generic_Reconciliation_Report { 公共部分類ReportFormDesign:形式 { 公共ReportFormDesign() { 的InitializeComponent(); } –

回答

0

看來問題在於你點擊第一個button1,那時你還沒有初始化locationArray。爲了避免這種錯誤初始化locationArray這樣的:

public ReportFormDesign() 
    { 
     InitializeComponent(); 
     this.locationArray = new string[0]; 
    } 

也請記住,Environment.Exit()將拋出Win32Exception有時。 改用Application.Exit() 如果您每次退出你的應用程序,你點擊button1,可以代替初始化locationArray更換兩線

string test = Convert.ToString(locationArray.Length); 
MessageBox.Show(test); 

MessageBox.Show(0); 

但這取決於你的意圖是什麼。

+0

感謝您的所有意見。我會嘗試所有的建議並回報。 –

+0

好東西。它的工作,現在我可以訪問數組的內容。視覺工作室抱怨'這個',並要求刪除其中的工作。再次感謝。 –

+0

我很高興能幫上忙。 「this」對於VS來說是多餘的,但像Resharper這樣的工具推薦它作爲一種方法來知道你的變量是來自類還是本地的方法。 –

1

我認爲你對術語有點混淆。你粘貼的是實際的方法,而不是類。如果你想在他們之間分享一個變量,最好的方法是創建一個屬性。所以我假設你的真實課程有兩個事件...我會添加這樣的東西。

public class Form1: Form { // this should be already in your code... either form or webform 
    public string[] LocationArray {get; set}; 


public void button1_Click_1(object sender, EventArgs e) 
    { 
     this.LocationArray = ['a', 'b']; // or whatever variable 
    } 

private void button1_Click(object sender, EventArgs e) 
    { 
    var array = this.LocationArray; // you do not need to create an extra variable, this is only a way to reference it 
    } 
} 

至於其他建議免費:確保你將代碼添加到他們之前重命名你的對象,這樣你就不會得到那個奇怪的命名約定button1_Click,但你可以有btnSave_Click,使得有更多的意義。從這個班級以外訪問同一個房產也很容易。如果是這種情況,只需ping我即可,我也可以更新答案。

+0

感謝David。我已經意識到,添加代碼後。一旦啓動並運行,我將克隆該解決方案並使用適當的命名約定。 –