2011-07-10 97 views
0

所以我想弄清楚從先前的方法「重用」一個變量的最簡單的方法,但無法找到我正在尋找什麼地方。如何以一種方法使用變量?如果使用其他方法聲明該變量? C#

基本上我有一個簡單的程序,使用openFileDialog打開文本文件(這發生在一個按鈕單擊)。在另一個按鈕中點擊它寫下我寫入文件的內容。

我在被寫入文件,因爲我不能從方法1重用路徑變量的問題:/

這裏是我的代碼:

public void button1_Click(object sender, EventArgs e) 
    { 

     OpenFileDialog OFD = new OpenFileDialog(); 
     OFD.Title = "Choose a Plain Text File"; 
     OFD.Filter = "Text File | *.txt"; 
     OFD.ShowDialog(); 
     string filePath = OFD.FileName; 
     if (OFD.FileName != "") { 
      using (StreamReader reader = new StreamReader(@filePath)) 
      { 

       while (!reader.EndOfStream) 
       { 

        richTextBox1.AppendText(reader.ReadLine()); 

       } 

       reader.Close(); 
      } 
     } 
    } 

    public string filePath; 

    public void button2_Click(object sender, EventArgs e) 
    { 
     using (StreamWriter writer = new StreamWriter(@filePath)){ 

      writer.WriteLine(richTextBox1.Text); 
      writer.Close(); 
     } 
    } 
+0

如果您接受答案,它將是n冰。 –

回答

1

使它成爲一個實例變量。

string path = ""; 

public void FirstMethod() 
{ 
    path = "something"; 
} 

public void SecondMethod() 
{ 
    doSomething(path); 
} 
1
在你的方法

只是刪除聲明字符串文件路徑,使其看起來像

filePath = OFD.FileName; 

,這是所有

+0

謝謝你的工作!但你能解釋一下爲什麼這項工作? – Kriptonyc

+0

你已經聲明瞭與類成員同名的局部變量,所以當你在方法中設置'filePath'時,你只需要設置本地'filePath'而不是你的類成員'filePath'。在內部作用域(你的button1_Click方法)中使用相同類型和名稱聲明的變量總是將它們從外部作用域(在這種情況下是你的類)隱藏起來。 – grapkulec

0

你不能在你的代碼已經發布,因爲它的出範圍消失了。

您可以讓第一個方法返回選擇,然後將其傳遞給第二個方法。這將工作。

我不喜歡你的方法名稱。 button2_Clickbutton1_Click?他們都沒有告訴客戶該方法做了什麼。

你的方法可能做得太多。我可能有一種方法來選擇文件並單獨讀取和寫入。

1
public string filePath; 

public void button1_Click(object sender, EventArgs e) 
{ 

    OpenFileDialog OFD = new OpenFileDialog(); 
    OFD.Title = "Choose a Plain Text File"; 
    OFD.Filter = "Text File | *.txt"; 
    OFD.ShowDialog(); 
    filePath = OFD.FileName; 
    if (OFD.FileName != "") { 
     using (StreamReader reader = new StreamReader(@filePath)) 
     { 

      while (!reader.EndOfStream) 
      { 

       richTextBox1.AppendText(reader.ReadLine()); 

      } 

      reader.Close(); 
     } 
    } 
} 

public void button2_Click(object sender, EventArgs e) 
{ 
    // you should test a value of filePath (null, string.Empty) 

    using (StreamWriter writer = new StreamWriter(@filePath)){ 

     writer.WriteLine(richTextBox1.Text); 
     writer.Close(); 
    } 
} 
0

filePath串中的的button1_Click聲明一個string的一個新實例,其中HIES成員實例一個範圍。刪除string類型以使方法中的filePath引用成員實例。很可能你也不需要emmeber實例爲public,但應該是私有的,因爲它允許兩種方法進行通信。

public void button1_Click(object sender, EventArgs e) 
    { 
     // etc. 
     filePath = OFD.FileName; 
    } 

private string filePath; 
相關問題