2012-02-15 68 views
4

我是新來C#我真的需要知道如何調用/使用另一種方法的字符串。

例如:C#引用一個變量從另一種方法

public void button1_Click(object sender, EventArgs e) 
{ 
    string a = "help"; 
} 

public void button2_Click(object sender, EventArgs e) 
{ 
    //this is where I need to call the string "a" value from button1_click 
    string b = "I need "; 
    string c = b + a;   
} 

因此,在這個例子中,我需要從函數調用字符串「一個」在功能上button1_Click()定義button2_Click()

謝謝!

回答

24

通常你把它作爲一個參數,像這樣:

void Method1() 
{ 
    var myString = "help"; 
    Method2(myString); 
} 

void Method2(string aString) 
{ 
    var myString = "I need "; 
    var anotherString = myString + aString; 
} 

然而,您示例中的方法是事件偵聽器。你通常不直接打電話給他們。 (我想你可以,但我從來沒有找到一個例子,其中一個應該)。因此,在這種特殊情況下,將值存儲在類的公共位置以便使用兩種方法會更明智。像這樣:

string StringA { get; set; } 

public void button1_Click(object sender, EventArgs e) 
{ 
    StringA = "help"; 
} 

public void button2_Click(object sender, EventArgs e) 
{ 
    string b = "I need "; 
    string c = b + StringA; 
} 

但是,請注意,這將在ASP.NET中表現非常不同。所以,如果這就是你正在使用的,那麼你可能會想要更進一步。它的行爲不同的原因是因爲服務器端是「無狀態的」。因此,每個來自客戶端的按鈕點擊都會產生一個全新的類實例。因此,在第二個按鈕單擊事件處理程序中使用它時,將不會反映在第一個按鈕單擊事件處理程序中設置該類級別的成員。

在這種情況下,您需要查看Web應用程序中的持久狀態。選項包括:

  1. 頁值(隱藏字段,例如)
  2. 餅乾
  3. 會話變量
  4. 應用程序變量
  5. 數據庫
  6. 服務器端文件
  7. 其他一些在服務器端持久保存數據的手段等。
0

make是一個類級變量(全局變量),或者爲String a創建一個getter和setter,來命名幾個選項。

0

你不能那樣做。 string a是一個局部變量聲明。它被稱爲「本地」,因爲它只能「本地」訪問它所在的塊。

要使變量對兩個方法都可見,可以在包含方法的類中創建一個字段。如果這些方法處於不同的類別中,那麼解決方案會變得更加複雜。

7

您需要在class的範圍,而不是方法來聲明string a,此刻它是一種「局部變量」。

例子:

private string a = string.Empty; 

public void button1_Click(object sender, EventArgs e) 
{ 
    a = "help"; 
} 

public void button2_Click(object sender, EventArgs e) 
{ 
    //this is where I need to call the string "a" value from button1_click 
    string b = "I need"; 
    string c = b + a;   
} 

現在,您可以從任何地方訪問你class裏面你的「私人領域」 a的值,其在你的榜樣將是一個Form

1

重構到這一個方法調用(或屬性),所以您可以訪問其他地方在你的應用程序的a值:

public String GetStringAValue() { 
    return "help"; 
} 

public void button1_Click(object sender, EventArgs e) { 
    string a = GetStringAValue(); 
} 

public void button2_Click(object sender, EventArgs e) { 
    string a = GetStringAValue(); 
    string b = "I need"; 
    string c = b + a; 
} 

另外請注意,您可以使用隱式類型聲明。實際上,這些是等效的聲明:

string a = GetStringAValue(); 
var a = GetStringAValue(); 
0

你不能這樣做,因爲這些變量在不同scopes(認爲它是被隱藏)。實現這一目標的唯一方法是在主窗體類移動:

public partial class Form1 : Form 
{ 
    string a; 

    // etc ... 
} 
0
class SomeClass 
{ 
    //Fields (Or Properties) 
    string a; 

    public void button1_Click(object sender, EventArgs e) 
    { 
     a = "help"; //Or however you assign it 
    } 

    public void button2_Click(object sender, EventArgs e) 
    { 
     string b = "I need"; 
     string c = b + (a ?? String.Empty); //'a' should be null checked somehow. 
    } 
} 
-2

您可以在變量保存到一個文件,稍後再訪問該文件,就像這樣:

public void button1_Click(object sender, EventArgs e) 
{ 
    string a = "help"; 
    File.WriteAllText(@"C:\myfolder\myfile.txt", a); //Change this to your real file location 
} 

public void button2_Click(object sender, EventArgs e) 
{ 
    string d = File.ReadAllText(@"C:\myfolder\myfile.txt"); 

    //this is where I need to call the string "a" value from button1_click 
    string b = "I need"; 
    string c = b + d; //Instead of a, put the variable name (d in this case)   
} 

如果你這樣做,只要確保把這個代碼:using System.IO;

+0

這樣一個壞實踐。爲了完成小型工作,不建議使用這種方法。 – 2017-05-04 09:40:47

相關問題