2009-11-28 17 views
0

我對c#相當陌生。我有一個有2個按鈕的winform。 button1_click()生成一些數據,如data1,data2,data3,data4。現在我想用在button2_click這個數據():從button1_click()獲取信息到button2_click()

private void button1_click(object sender, EventArgs e) 
    { 
     //generate data1, data2, data3, data4.. 
    } 



    private void button2_click(object sender, EventArgs e) 
    { 
     //do processing using data1, data2, data3, data4.. 
    } 

我想這應該是比較簡單的用C#做不使用文件和這樣的。 我知道我可以使用從EvenArgs派生的自定義類傳遞參數,但是我需要在傳遞它之前先獲取數據。

回答

0

的easies的方式來做到這一點是一些國家的加入包含這兩個按鈕的表單(我假設它們在同一個表單上)。

所以在同一類中,你有你需要添加成員張貼的方法:

class MyForm : Form 
{ 
    MyType data1; 
    MyType data2; 


    private void button1_click(object sender, EventArgs e) 
    { 
     //generate data1, data2, data3, data4.. <-- here you just set the state of the Form 
    } 



    private void button2_click(object sender, EventArgs e) 
    { 
     //do processing using data1, data2, data3, data4.. <-- here you use the state set by button 1 
    } 
} 
1

創建data1等的專用字段,並將它們設置爲button1_click,一旦設置它們,將通過button2_click中的當前實例使用它們。

FIelds是對象實例的一部分共享狀態。這意味着任何實例字段(未標記爲靜態並在當前類型的主體內聲明的字段)都可用於所有實例方法(未標記爲靜態並在當前類型的主體內聲明的方法) 。由於您的按鈕點擊事件處理程序都是實例方法,因此它們都可以訪問這些字段。

嘗試這樣:

class Foo 
{ 
    // These are the fields 
    Object data1; 
    Object data2; 
    Object data3; 
    Object data4; 

    void button1_click(object sender, EventArgs e) 
    { 
     this.data1 = generateData1(); 
     this.data2 = generateData2(); 
     this.data3 = generateData3(); 
     this.data4 = generateData4(); 
    } 

    void button2_click(object sender, EventArgs e) 
    { 
     // In this method you can access this.data1 etc. since 
     // they are instance fields 
    } 
} 
+0

感謝大家的令人難以置信的快速響應。是的,這是我犯的錯誤,我在button1_click()裏聲明瞭fields/variables,所以無法在範圍之外看到它。 – dizzysoul

0

您可以使用類字段:

private string data1 = ""; 
private string data2 = ""; 
private string data3 = ""; 

private void button1_click(object sender, EventArgs e) 
{ 
    data1 = "some data for field1"; 
    data2 = "some data for field2"; 
    data3 = "some data for field3"; 
} 

private void button2_click(object sender, EventArgs e) 
{ 
    // use data1, data2, ... here: 
    MessageBox.Show(data1 + data2 + data3); 
} 
0

例子:

public class MyForm : Form { 

    private string _data1; 

    private void button1_click(object sender, EventArgs e) { 
     _data1 = "hello"; 
    } 

    private void button2_click(object sender, EventArgs e) { 
     MessageBox.Show(_data1); 
    } 
}