我对c#很新。我有一个带有2个按钮的winform。 button1_click()生成一些数据,如data1,data2,data3,data4。现在我想在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 :(得分: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
}
}
答案 1 :(得分: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);
}
答案 2 :(得分: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);
}
}
答案 3 :(得分:0)
这样做的简单方法是在Form中添加一些包含这两个按钮的状态(我假设它们在同一个表单上)。
因此,在您拥有已发布方法的同一个类中,您需要添加成员:
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
}
}